Add a latest_build_status table

This will avoid many queries trying to figure out what the latest build status
is, which will hopefuly simplify queries as well as improving performance.
This commit is contained in:
Christopher Baines 2020-10-13 19:31:43 +01:00
parent 941d1af556
commit 83884ed2ea
5 changed files with 90 additions and 1 deletions

View file

@ -0,0 +1,27 @@
-- Deploy guix-data-service:create_latest_build_status to pg
BEGIN;
CREATE TABLE latest_build_status (
build_id integer PRIMARY KEY NOT NULL REFERENCES builds(id),
"timestamp" timestamp without time zone DEFAULT clock_timestamp(),
status guix_data_service.buildstatus NOT NULL
);
INSERT INTO latest_build_status
SELECT DISTINCT build_id,
first_value(timestamp) OVER rows_for_build AS timestamp,
first_value(status) OVER rows_for_build AS status
FROM build_status
WINDOW rows_for_build AS (
PARTITION BY build_id
ORDER BY
timestamp DESC,
CASE WHEN status = 'scheduled' THEN -2
WHEN status = 'started' THEN -1
ELSE 0
END DESC
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
);
COMMIT;