feat(publish-dedup): add indexes for publish task dedup and lookup
Add a unique index on desktop_tasks.dedup_key for active publish kinds (queued/in_progress/succeeded/unknown) so duplicate publish submissions can be rejected at the DB layer, plus supporting indexes on publish_records and the desktop_tasks publish_record_id payload expression used by the new dedup lookup query. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1 @@
|
||||
DROP INDEX CONCURRENTLY IF EXISTS uq_desktop_tasks_publish_dedup_active;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Keep succeeded publish tasks in the active dedup set intentionally: the
|
||||
-- product rule is "one article can be published to an account once"; repeat
|
||||
-- publishing should use a copied/new article or an explicit admin status reset.
|
||||
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS uq_desktop_tasks_publish_dedup_active
|
||||
ON desktop_tasks (dedup_key)
|
||||
WHERE kind = 'publish'
|
||||
AND dedup_key IS NOT NULL
|
||||
AND status IN ('queued', 'in_progress', 'succeeded', 'unknown');
|
||||
@@ -0,0 +1 @@
|
||||
DROP INDEX CONCURRENTLY IF EXISTS idx_publish_records_article_account_active;
|
||||
@@ -0,0 +1,3 @@
|
||||
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_publish_records_article_account_active
|
||||
ON publish_records (tenant_id, article_id, platform_account_id, updated_at DESC, id DESC)
|
||||
WHERE status IN ('queued', 'publishing', 'success');
|
||||
+1
@@ -0,0 +1 @@
|
||||
DROP INDEX CONCURRENTLY IF EXISTS idx_desktop_tasks_publish_record_payload;
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_desktop_tasks_publish_record_payload
|
||||
ON desktop_tasks (
|
||||
tenant_id,
|
||||
workspace_id,
|
||||
(
|
||||
-- Keep this expression aligned with loadExistingPublishRecordTargets.
|
||||
CASE
|
||||
WHEN (payload->>'publish_record_id') ~ '^[0-9]+$'
|
||||
THEN (payload->>'publish_record_id')::bigint
|
||||
ELSE NULL
|
||||
END
|
||||
)
|
||||
)
|
||||
WHERE kind = 'publish'
|
||||
AND payload ? 'publish_record_id';
|
||||
Reference in New Issue
Block a user