KB-55CA
P10A-2B Rollback Instructions
3 min read Revision 1
p10a-2bdieu35pilotrollback
P10A-2B Rollback Instructions
Publication ID: 27e48995-d6a1-4a44-8559-cab6a07fdbe0
Approved package: /tmp/p10a-2a-rollback.sql (sha256 25cc49d9bcc96b8b7cd434fcf3d92656ce8fedd11f5edf6337e3e1ee5f18e184)
⚠️ Lifecycle Warning
Rollback is only feasible while:
tac_publication.lifecycle_status = 'proposed'(NOTenacted)- All
tac_unit_version.lifecycle_status = 'draft'(NOTenacted)
Triggers fn_tac_pm_enacted_lock and fn_tac_enacted_immut will block DELETE once any row flips to enacted. Do NOT enact this publication if a rollback is contemplated.
Current state (verified at 2026-04-29):
- publication:
proposed✅ - unit_versions:
draft✅ (rollback feasible)
Procedure
On VPS (contabo / 38.242.240.89):
docker exec -i postgres psql -U directus -d directus \
-v ON_ERROR_STOP=1 -X \
-v pub_id=27e48995-d6a1-4a44-8559-cab6a07fdbe0 \
< /tmp/p10a-2a-rollback.sql 2>&1 | tee /tmp/p10a-2b-rollback-output.log
Or paste the resolved SQL inline:
BEGIN;
DO $$
DECLARE v_lc text; v_pm int;
BEGIN
SELECT lifecycle_status INTO v_lc FROM tac_publication
WHERE id = '27e48995-d6a1-4a44-8559-cab6a07fdbe0'::uuid;
IF v_lc IS NULL THEN RAISE EXCEPTION 'pub_id not found'; END IF;
IF v_lc = 'enacted' THEN
RAISE EXCEPTION 'Refusing rollback: publication is enacted';
END IF;
SELECT count(*) INTO v_pm FROM tac_publication_member
WHERE publication_id = '27e48995-d6a1-4a44-8559-cab6a07fdbe0'::uuid;
RAISE NOTICE 'rollback: pm rows to drop = %', v_pm;
END $$;
DELETE FROM tac_publication_member
WHERE publication_id = '27e48995-d6a1-4a44-8559-cab6a07fdbe0'::uuid;
DELETE FROM tac_unit_version uv
USING tac_logical_unit lu
WHERE uv.logical_unit_id = lu.id
AND lu.doc_code='DIEU-35'
AND lu.canonical_address LIKE 'D38-DIEU35-%';
DELETE FROM tac_logical_unit
WHERE doc_code='DIEU-35' AND canonical_address LIKE 'D38-DIEU35-%';
DELETE FROM tac_publication
WHERE id = '27e48995-d6a1-4a44-8559-cab6a07fdbe0'::uuid;
COMMIT;
Post-Rollback Verification
SELECT count(*) FROM tac_publication
WHERE id='27e48995-d6a1-4a44-8559-cab6a07fdbe0'; -- expect 0
SELECT count(*) FROM tac_logical_unit
WHERE doc_code='DIEU-35' AND canonical_address LIKE 'D38-DIEU35-%'; -- expect 0
Backup safety net: directus_2026-04-29_0000.sql.gz (45 MB, today 02:00 UTC) at /opt/incomex/backups/pg/.