feat(db): backfill prefix snapshots and switch read path
Backfill миграция; чтение префиксов через snapshot; запись без дублирования rows. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
DELETE FROM prefix_snapshot_row;
|
||||
UPDATE config_revision SET prefix_snapshot_id = NULL WHERE prefix_snapshot_id IS NOT NULL;
|
||||
DELETE FROM prefix_snapshot;
|
||||
@@ -0,0 +1,31 @@
|
||||
-- Backfill prefix snapshots from revision_materialized_prefix.
|
||||
|
||||
WITH new_snaps AS (
|
||||
INSERT INTO prefix_snapshot (id, content_hash)
|
||||
SELECT gen_random_uuid(),
|
||||
substr(replace(cr.id::text, '-', '') || replace(cr.id::text, '-', ''), 1, 64)
|
||||
FROM config_revision cr
|
||||
WHERE cr.prefix_snapshot_id IS NULL
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM revision_materialized_prefix rmp WHERE rmp.revision_id = cr.id
|
||||
)
|
||||
RETURNING id, content_hash
|
||||
)
|
||||
UPDATE config_revision cr
|
||||
SET prefix_snapshot_id = ns.id
|
||||
FROM new_snaps ns
|
||||
WHERE cr.prefix_snapshot_id IS NULL
|
||||
AND ns.content_hash = substr(replace(cr.id::text, '-', '') || replace(cr.id::text, '-', ''), 1, 64);
|
||||
|
||||
INSERT INTO prefix_snapshot_row (snapshot_id, ord, prefix, community_id, source)
|
||||
SELECT cr.prefix_snapshot_id,
|
||||
(row_number() OVER (PARTITION BY cr.id ORDER BY rmp.id) - 1)::int,
|
||||
rmp.prefix,
|
||||
rmp.community_id,
|
||||
rmp.source
|
||||
FROM config_revision cr
|
||||
JOIN revision_materialized_prefix rmp ON rmp.revision_id = cr.id
|
||||
WHERE cr.prefix_snapshot_id IS NOT NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM prefix_snapshot_row psr WHERE psr.snapshot_id = cr.prefix_snapshot_id
|
||||
);
|
||||
Reference in New Issue
Block a user