-- Anhänge zurückziehen. -- -- Bisher gab es überhaupt keinen Weg, einen Anhang wieder loszuwerden. Wer die -- falsche Datei hochlud, musste damit leben - und das ist keine Strenge, -- sondern eine Lücke: die Regel des Hauses lautet nicht "nichts geht wieder -- weg", sondern "nichts geht **unbemerkt** weg" (siehe README, Zusicherung 2). -- -- Also derselbe Weg wie beim Verlaufseintrag und beim Dokument: zurückziehen -- mit Pflichtbegründung, der Anhang bleibt als Grabstein an seiner Stelle -- stehen, die Datei wird nicht mehr ausgeliefert. Rückgängig machen geht, -- protokolliert wird beides. ALTER TABLE "Attachment" ADD COLUMN "retractedAt" TIMESTAMP(3); ALTER TABLE "Attachment" ADD COLUMN "retractedById" TEXT; ALTER TABLE "Attachment" ADD COLUMN "retractionReason" TEXT; -- Zurückgezogen heisst: mit Zeitpunkt, mit Urheber und mit Begründung. Ein -- Grabstein ohne Grund wäre nur ein Verschwinden mit Zusatzschritt. ALTER TABLE "Attachment" ADD CONSTRAINT "Attachment_ruecknahme_vollstaendig" CHECK ( ("retractedAt" IS NULL AND "retractedById" IS NULL AND "retractionReason" IS NULL) OR ("retractedAt" IS NOT NULL AND "retractedById" IS NOT NULL AND length(btrim("retractionReason")) >= 10) ); -- Kein DELETE, wie bei Eintrag und Dokument. Ein Anhang ist Beweismittel: er -- haengt an einem Eintrag, der nicht verschwinden kann, und darf deshalb auch -- selbst nicht verschwinden. CREATE RULE attachment_no_delete AS ON DELETE TO "Attachment" DO INSTEAD NOTHING;