In meinem Postgres 9.4 Datenbank, ich habe die folgenden Trigger/Funktion, die eine "Soft-löscht" Funktionalität implementiert:Wie implementiert man ein Löschen von gelöschten Datensätzen in Postgres?
ALTER TABLE my_schema.my_table
ADD COLUMN delete_ind integer
CREATE OR REPLACE FUNCTION trigger_mytable_soft_delete()
RETURNS trigger AS $$
DECLARE
command text := ' SET delete_ind = 1 WHERE uuid_col = $1';
BEGIN
EXECUTE 'UPDATE "my_schema"."my_table"' || TG_TABLE_NAME || command USING OLD.uuid_col;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER my_table_soft_delete_trigger
BEFORE DELETE ON "my_schema"."my_table"
FOR EACH ROW EXECUTE PROCEDURE trigger_mytable_soft_delete();
Der Code gibt mir über die "soft-löscht" Funktionalität, sondern auch hindert mich daran, die Zeilen, die bereits als gelöscht markiert sind, zu löschen/zu löschen.
Das neue gewünschte Verhalten ist, diese Löschfunktion zu haben, um den Wert des delete_ind-Felds zu prüfen, und, wenn es bereits auf 1 gesetzt ist, diese Zeile endgültig zu löschen.
Was ist die richtige bedingte Syntax, die den Wert von delete_ind setzen würde. oder löschen Sie die fragliche Zeile tatsächlich basierend auf dem aktuellen Wert der Spalte delete_ind?