我经常看到它声明应该避免使用规则并使用触发器.我可以看到规则系统中的危险,但当然有规则的有效用途,对吧?这些是什么?
我出于一般兴趣而对此提出这个问题; 我对数据库不太熟悉.
例如,在过去我需要锁定某些数据,所以我做了类似这样的事情:
CREATE OR REPLACE RULE protect_data AS
ON UPDATE TO exampletable -- another similar rule for DELETE
WHERE OLD.type = 'protected'
DO INSTEAD NOTHING;
Run Code Online (Sandbox Code Playgroud)
然后,如果我想编辑受保护的数据:
START TRANSACTION;
ALTER TABLE exampletable DISABLE RULE protect_data;
-- edit data as I like
ALTER TABLE exampletable ENABLE RULE protect_data;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我同意这是hacky,但在这种情况下我无法更改访问数据库的应用程序(甚至在它上面抛出错误).所以奖励积分查找原因,这是一个危险的/无效的使用规则系统的,但不是为什么,这是不好的设计.
输入以下命令时:
\copy mmcompany from '<path>/mmcompany.txt' delimiter ',' csv;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: duplicate key value violates unique constraint "mmcompany_phonenumber_key"
Run Code Online (Sandbox Code Playgroud)
我理解为什么会这样,但是如何以插入有效条目的方式执行命令,并且会丢弃创建错误的命令?