aboutsummaryrefslogtreecommitdiff
path: root/sqitch/deploy
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-05 14:10:09 +0100
committerChristopher Baines <mail@cbaines.net>2019-12-12 20:07:22 +0000
commit0291bda98abf4cf4299434ed304aa72846f405dd (patch)
treee55912d1c0a6170be179139891576f15a25d93ee /sqitch/deploy
parent8a5beb7f8813ec6ecca3d1e8da256bbbbcc67a36 (diff)
downloaddata-service-0291bda98abf4cf4299434ed304aa72846f405dd.tar
data-service-0291bda98abf4cf4299434ed304aa72846f405dd.tar.gz
Deduplicate builds and add a unique index
Duplicate builds could creep in if the code to create them ran concurrently. I didn't exclude them initially, as I was unsure if there should be such a restriction, but at least for now, Cuirass builds map exactly to a single derivation, so use the same restriction here.
Diffstat (limited to 'sqitch/deploy')
-rw-r--r--sqitch/deploy/sort_out_duplicate_builds.sql33
1 files changed, 33 insertions, 0 deletions
diff --git a/sqitch/deploy/sort_out_duplicate_builds.sql b/sqitch/deploy/sort_out_duplicate_builds.sql
new file mode 100644
index 0000000..92bd2c5
--- /dev/null
+++ b/sqitch/deploy/sort_out_duplicate_builds.sql
@@ -0,0 +1,33 @@
+-- Deploy guix-data-service:sort_out_duplicate_builds to pg
+
+BEGIN;
+
+DELETE FROM build_status WHERE build_id IN (
+ SELECT builds.id
+ FROM builds
+ INNER JOIN (
+ SELECT derivation_file_name, MIN(id) AS id
+ FROM builds
+ GROUP BY build_server_id, derivation_file_name
+ HAVING COUNT(DISTINCT id) > 1
+ ) AS min_ids
+ ON min_ids.derivation_file_name = builds.derivation_file_name AND
+ min_ids.id != builds.id
+);
+
+DELETE FROM builds WHERE id IN (
+ SELECT builds.id
+ FROM builds
+ INNER JOIN (
+ SELECT derivation_file_name, MIN(id) AS id
+ FROM builds
+ GROUP BY build_server_id, derivation_file_name
+ HAVING COUNT(DISTINCT id) > 1
+ ) AS min_ids
+ ON min_ids.derivation_file_name = builds.derivation_file_name AND
+ min_ids.id != builds.id
+);
+
+CREATE UNIQUE INDEX ON builds (build_server_id, derivation_file_name);
+
+COMMIT;