对于安全敏感的设计,我想在某些表上禁用DELETEs.

DELETE应该只在一行上设置deleted标志(然后在应用层使用的视图上可以看到).

据我所知,rule将生成额外的查询,因此规则无法 suppress 原始查询.

作为一个带有触发器的玩具示例(尚未测试):

-- data in this table should be 'undeletable'
CREATE table article (
    id serial,
    content text not null,
    deleted boolean default false
)

-- some view that would only show articles, that are NOT deleted
...

-- toy trigger (not tested)
CREATE OR REPLACE FUNCTION suppress_article_delete()
RETURNS TRIGGER AS $sad$
BEGIN
    IF (TG_OP = 'DELETE') THEN
        UPDATE article SELECT id, content, TRUE;
        -- NEW or NULL??
        RETURN NEW;
    END IF;
    RETURN NULL;
END;
$sad$ LANGUAGE plpgsql;

什么是 suppress DELETE的好方法?

推荐答案

据我所知,规则会生成额外的查询,因此规则无法 suppress 原始查询.

不是真的-这可能是一个INSTEAD规则:

 CREATE RULE shoe_del_protect AS ON DELETE TO shoe DO INSTEAD NOTHING;

(手册同一页上的示例).

另一种方法是在有问题的表上删除REVOKE个特权,并创建用于删除的存储过程...更新和插入也可能.

Postgresql相关问答推荐

PostgreSQL按描述请求

带有regex表达式的Postgres SQL

使用regexp获取表名

在Go中,如何在没有数据库包的情况下运行PostgreSQL查询?

GORM Golang SQL查询执行不区分大小写的搜索不起作用

PL/pgSQL中的IP递增函数

是否可以在 postgres jsonb 列中的列表上创建索引

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

如何展平也在关系中使用的区分大小写的列

PostgreSQL SELECT 结果具有不同的 id,它更喜欢来自另一个表的特定值

SQLAlchemy 中使用什么类型存储字节字符串?

如何在 psycopg2 中使用服务器端游标

Select 日期最高的行

如何使用 SpringBoot + JPA 存储 PostgreSQL jsonb?

获取 psycopg2 count(*) 结果数

判断 PostgreSQL 中的角色是否设置了密码

实时监控 PostgreSQL 查询的应用程序?

升级到 Yosemite 10.10 后无法连接到 postgresql 数据库

使用python将数据从csv复制到postgresql

如何在postgres中将整数分钟转换为间隔