Я использовал этот пример , и он работал хорошо, когда все мои таблицы были в публичной схеме.
Но триггер не работал, так как я разделил таблицы на разные схемы и применил наследование.
Вот пример моей структуры:
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
не меняется само.Кажется, триггер не работает, но я не понимаю, почему.
Что я должен сделать, чтобы исправить поведение?