我有以下基于另一个 SE 问题(PostgreSql 上的哈希环)
CREATE TABLE sms.tablename
(
id uuid,
mdate date
)
和分区。
CREATE TABLE sms.tablename_partition_1 ( CHECK ( sms.hash(id) = '1' ) ) INHERITS (sms.tablename);
...
CREATE TABLE sms.tablename_partition_f ( CHECK ( sms.hash(id) = 'f' ) ) INHERITS (sms.tablename);
现在问题来了。
当我添加此触发器时。
CREATE TRIGGER "delete_me"
BEFORE DELETE
ON sms.tablename
FOR EACH ROW
EXECUTE PROCEDURE sms.delete_me(E'\\x');
CREATE OR REPLACE FUNCTION sms.delete_me()
RETURNS trigger AS
$BODY$
begin
RAISE NOTICE 'HERE !!!';
return OLD;
end;
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 100;
这个触发器永远不会运行......我看不到 NOTICE 消息。现在,如果我将相同的触发器应用于另一个表(非分区),它工作正常,它完成了它的工作,该行被删除并弹出通知消息。
更多信息:“i686-pc-linux-gnu 上的 PostgreSQL 9.1.6,由 gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3 编译,32 位”
我只是想避免在表上使用存储过程并保持 ORM 清洁。
编辑:
1) 表或任何继承的表上不存在任何规则,同样适用于索引或 PK。
2)运行以下命令。
DELETE FROM sms.tablename WHERE id = 'a5e52a04-282f-4cf4-8347-a43d68725e6b';
3) 显示此问题的完整 SQL。
http://pastebin.com/mZBFEtaY