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' (NOT enacted)
  • All tac_unit_version.lifecycle_status = 'draft' (NOT enacted)

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/.