From 64be52844e679d205d959ea06d50c44366c39097 Mon Sep 17 00:00:00 2001
From: Christopher Baines <mail@cbaines.net>
Date: Mon, 23 May 2022 19:10:25 +0100
Subject: 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.
---
 sqitch/deploy/git_branch_id.sql | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 sqitch/deploy/git_branch_id.sql

(limited to 'sqitch/deploy/git_branch_id.sql')

diff --git a/sqitch/deploy/git_branch_id.sql b/sqitch/deploy/git_branch_id.sql
new file mode 100644
index 0000000..9da071c
--- /dev/null
+++ b/sqitch/deploy/git_branch_id.sql
@@ -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;
-- 
cgit v1.2.3

