aboutsummaryrefslogtreecommitdiff
path: root/sqitch/deploy/build_status_add_unique_index.sql
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-06-30 18:30:01 +0100
committerChristopher Baines <mail@cbaines.net>2020-07-01 09:35:29 +0100
commit5ee82075656609e4b2cd03a304162959147f929c (patch)
treee5f332cf278961a1786fe1f2a0c3203bc4695c88 /sqitch/deploy/build_status_add_unique_index.sql
parent919255033121c0aeab6c4c16d58359a07b3408b5 (diff)
downloaddata-service-5ee82075656609e4b2cd03a304162959147f929c.tar
data-service-5ee82075656609e4b2cd03a304162959147f929c.tar.gz
Avoid duplicate build status entries
This effectively makes adding build status entries idempotent to some degree.
Diffstat (limited to 'sqitch/deploy/build_status_add_unique_index.sql')
-rw-r--r--sqitch/deploy/build_status_add_unique_index.sql18
1 files changed, 18 insertions, 0 deletions
diff --git a/sqitch/deploy/build_status_add_unique_index.sql b/sqitch/deploy/build_status_add_unique_index.sql
new file mode 100644
index 0000000..0ba5e6c
--- /dev/null
+++ b/sqitch/deploy/build_status_add_unique_index.sql
@@ -0,0 +1,18 @@
+-- Deploy guix-data-service:build_status_add_unique_index to pg
+
+BEGIN;
+
+DELETE FROM build_status
+WHERE id NOT IN (
+ SELECT MIN(id) FROM build_status GROUP BY build_id, timestamp, status
+);
+
+ALTER TABLE build_status
+ADD CONSTRAINT build_status_build_id_timestamp_status_unique
+UNIQUE (build_id, timestamp, status);
+
+CREATE UNIQUE INDEX build_status_build_id_status_unique_idx
+ ON build_status (build_id, status)
+ WHERE timestamp IS NULL;
+
+COMMIT;