\set ON_ERROR_STOP on BEGIN; DO $$ DECLARE orphan_count integer; mirrored_count integer; BEGIN SELECT count(*) INTO orphan_count FROM "FileAsset" file WHERE file."bizType" LIKE 'CONTRACT%' AND NOT EXISTS (SELECT 1 FROM "Contract" contract WHERE contract.id = file."bizId"); SELECT count(*) INTO mirrored_count FROM "FileAsset" orphan WHERE orphan."bizType" LIKE 'CONTRACT%' AND NOT EXISTS (SELECT 1 FROM "Contract" contract WHERE contract.id = orphan."bizId") AND EXISTS ( SELECT 1 FROM "FileAsset" current_file JOIN "Contract" current_contract ON current_contract.id = current_file."bizId" WHERE current_file."bizType" = orphan."bizType" AND current_file."fileName" = orphan."fileName" AND current_file.size = orphan.size ); IF orphan_count <> 29 OR mirrored_count <> orphan_count THEN RAISE EXCEPTION 'Unexpected orphan contract files: orphan %, mirrored %', orphan_count, mirrored_count; END IF; END $$; DELETE FROM "FileAsset" file WHERE file."bizType" LIKE 'CONTRACT%' AND NOT EXISTS (SELECT 1 FROM "Contract" contract WHERE contract.id = file."bizId"); COMMIT;