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

继承表中的Postgresql更新时间戳触发器,postgresql,database-trigger,Postgresql,Database Trigger,我使用了,当我的所有表都在公共模式中时,它工作得很好 但自从我将表分为不同的模式并应用了继承之后,触发器就不起作用了 以下是我的结构示例: CREATE SCHEMA common; CREATE SCHEMA video; CREATE TABLE common.file ( file_id SERIAL PRIMARY KEY, url VARCHAR(255) NOT NULL, mime_typ

我使用了,当我的所有表都在公共模式中时,它工作得很好

但自从我将表分为不同的模式并应用了继承之后,触发器就不起作用了

以下是我的结构示例:

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();
当我执行
更新common.file…
更新video.file…
字段
common.file.modified
时,不会自行更改。看来扳机不动了,但我不明白为什么


如何修复该行为?

在所述问题中,触发器仅在
common.file
上设置,因此
更新common.file…
video.file中插入行时不起作用

文档说明:INSERT始终精确插入指定的表中

所以触发器应该同时应用于
common.file
video.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.file
video.file
中插入的行时,相应的触发器将调用。

对于
video.file
上的更新,触发器不会触发,但对于
com.file
上的更新,它可以正常工作:谢谢。我找出了问题并写了答案。