2017-01-19 3 views
0

Ich möchte sql Zeilenlöschungen in einer Tabelle in einer Postgres-Datenbank verhindern, um sicherzustellen, dass es keine andere Möglichkeit zum Löschen von Zeilen als weiche Löschungen gibt, bei denen es sich tatsächlich um eine Aktualisierung der Spalte "active" handelt weich gelöschtWie erzwingen Sie weiche Löschungen auf Postgres?

Konnte dies mit einer Postgres-SQL-Regel erreicht werden oder gibt es ein anderes Mittel?

Codebeispiele sind willkommen.

+0

ja - 'ON DO INSTEAD' DELETE das Ding tun sollte –

+0

hier sind Codebeispiele: https://www.postgresql.org/ docs/current/static/sql-createrule.html –

+0

Ist es möglich, einen Fehler von einer Regel zu erheben, im Gegensatz zu DO INSTEAD NOTHING – murungu

Antwort

1

Die folgenden Werke:

CREATE OR REPLACE FUNCTION enforce_soft_delete() RETURNS VOID AS $$ 
BEGIN 
RAISE EXCEPTION 'only soft deletes allowed'; 
END; 
$$ LANGUAGE plpgsql; 


CREATE OR REPLACE RULE prevent_account_deletion AS ON DELETE 
TO account 
DO INSTEAD SELECT enforce_soft_delete(); 
0

revoke

revoke update on the_table 
from public, another_role [cascade | restrict] 
Verwandte Themen