继承表中的 Postgresql 更新时间戳触发器



我使用了这个例子,当我的所有表都在公共模式中时,它运行良好。

但是自从我将表分成不同的架构并应用继承以来,触发器一直不起作用。

这是我的结构示例:

CREATE SCHEMA common;
CREATE SCHEMA video;
CREATE TABLE common.file (
file_id    SERIAL PRIMARY KEY,
url        VARCHAR(255)                         NOT NULL,
mime_type  VARCHAR(31) DEFAULT ''               NOT NULL,
size       INTEGER                              NOT NULL,
modified   TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL
);
CREATE TABLE video.file (
width       INTEGER                 NOT NULL,
height      INTEGER                 NOT NULL,
local_path  VARCHAR(255) DEFAULT '' NOT NULL
)
INHERITS (common.file);
CREATE FUNCTION common.update_modified()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
CREATE TRIGGER update_modified 
BEFORE UPDATE ON common.file 
FOR EACH ROW EXECUTE PROCEDURE common.update_modified();

当我做UPDATE common.file ...UPDATE video.file ...领域时,common.file.modified不会改变自己。似乎触发器没有运行,但我不明白为什么。

我应该怎么做才能修复该行为?

在描述的问题中,触发器仅在common.file上设置,因此如果行插入UPDATE common.file ...则不起作用video.file

文档说:插入总是准确地插入到指定的表中

所以触发器应该应用于common.filevideo.file

-- Creating schemas and tables the same
-- Let function be in public scheme
CREATE FUNCTION update_modified()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
CREATE TRIGGER update_modified 
BEFORE UPDATE ON common.file 
FOR EACH ROW EXECUTE PROCEDURE update_modified();
CREATE TRIGGER update_modified 
BEFORE UPDATE ON video.file 
FOR EACH ROW EXECUTE PROCEDURE update_modified();

在这种情况下,当我们更新插入common.filevideo.file中的行时,相应的触发器将调用。

最新更新