Partition the package_derivations_by_guix_revision_range table
And create a proper git_branches table in the process. I'm hoping this will help with slow deletions from the package_derivations_by_guix_revision_range table in the case where there are lots of branches, since it'll separate the data for one branch from another. These migrations will remove the existing data, so rebuild-package-derivations-table will currently need manually running to regenerate it.
This commit is contained in:
parent
89545caa3f
commit
64be52844e
19 changed files with 442 additions and 167 deletions
32
sqitch/deploy/git_branch_id.sql
Normal file
32
sqitch/deploy/git_branch_id.sql
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
-- Deploy guix-data-service:git_branch_id to pg
|
||||
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE git_branches RENAME TO git_branches_old;
|
||||
|
||||
CREATE TABLE git_branches (
|
||||
id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
name character varying NOT NULL,
|
||||
git_repository_id integer NOT NULL REFERENCES git_repositories (id),
|
||||
CONSTRAINT git_repository_id_name_unique UNIQUE (git_repository_id, name)
|
||||
);
|
||||
|
||||
CREATE TABLE git_commits (
|
||||
id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
commit character varying NOT NULL,
|
||||
git_branch_id integer NOT NULL REFERENCES git_branches (id),
|
||||
datetime timestamp without time zone NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO git_branches (name, git_repository_id)
|
||||
SELECT DISTINCT name, git_repository_id
|
||||
FROM git_branches_old;
|
||||
|
||||
INSERT INTO git_commits (commit, git_branch_id, datetime)
|
||||
SELECT commit, git_branches.id, datetime
|
||||
FROM git_branches_old
|
||||
INNER JOIN git_branches
|
||||
ON git_branches_old.name = git_branches.name
|
||||
AND git_branches_old.git_repository_id = git_branches.git_repository_id;
|
||||
|
||||
COMMIT;
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
-- Deploy guix-data-service:partition_package_derivations_by_guix_revision_range to pg
|
||||
|
||||
BEGIN;
|
||||
|
||||
DROP TABLE package_derivations_by_guix_revision_range;
|
||||
|
||||
CREATE TABLE package_derivations_by_guix_revision_range (
|
||||
git_branch_id integer NOT NULL REFERENCES git_branches (id),
|
||||
package_name varchar NOT NULL,
|
||||
package_version varchar NOT NULL,
|
||||
derivation_id integer NOT NULL,
|
||||
system varchar NOT NULL,
|
||||
target varchar NOT NULL,
|
||||
first_guix_revision_id integer NOT NULL REFERENCES guix_revisions (id),
|
||||
last_guix_revision_id integer NOT NULL REFERENCES guix_revisions (id)
|
||||
) PARTITION BY LIST (git_branch_id);
|
||||
|
||||
COMMIT;
|
||||
Loading…
Add table
Add a link
Reference in a new issue