diff options
author | Christopher Baines <mail@cbaines.net> | 2019-12-05 14:10:09 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-12-12 20:07:22 +0000 |
commit | 0291bda98abf4cf4299434ed304aa72846f405dd (patch) | |
tree | e55912d1c0a6170be179139891576f15a25d93ee /sqitch/deploy | |
parent | 8a5beb7f8813ec6ecca3d1e8da256bbbbcc67a36 (diff) | |
download | data-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.sql | 33 |
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; |