【问题标题】:How to enforce soft deletes on postgres?如何在 postgres 上强制执行软删除?
【发布时间】:2017-01-19 15:52:00
【问题描述】:

我想防止对 Postgres 数据库中的表进行 sql 行删除,以确保除了软删除之外没有其他删除行的方法,软删除实际上是对行的“活动”列的更新被软删除。

这可以使用 Postgres sql 规则实现还是有其他方法??

感谢代码示例。

【问题讨论】:

  • 是的 - ON DELETE DO INSTEAD 应该做的事情
  • 是否可以从规则中引发错误,而不是 DO INSTEAD NOTHING
  • 如果您需要逻辑,最好使用函数 delete_row(args) 来执行所有操作,包括异常等
  • 您能否提供一个不带参数并引发异常的简单函数的代码示例?这不是直截了当的,因为函数需要返回类型

标签: sql postgresql constraints rule soft-delete


【解决方案1】:

以下作品:

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();

【讨论】:

    【解决方案2】:

    revoke

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多