выполнить триггер, когда я создаю таблицу - PullRequest
15 голосов
/ 23 марта 2012

Я хотел бы знать, можно ли выполнить триггер для системной таблицы PostgreSQL при создании таблицы

Мне нужно добавить 2 функции в каждую таблицу моей базы данных, и я хотел бы это сделатьдинамически

Спасибо

Ответы [ 3 ]

13 голосов
/ 11 октября 2013

Я знаю, что это старый вопрос, но теперь он реализован в версии 9.3 или, по крайней мере, частично http://www.postgresql.org/docs/9.3/static/event-trigger-definition.html

7 голосов
/ 06 июня 2017

Это можно сделать с помощью триггера события :

CREATE OR REPLACE FUNCTION on_create_table_func()
RETURNS event_trigger AS $$
BEGIN
    -- your code here
END
$$
LANGUAGE plpgsql;

CREATE EVENT TRIGGER
on_create_table ON ddl_command_end
WHEN TAG IN ('CREATE TABLE')
EXECUTE PROCEDURE on_create_table_func();

Обратите внимание, что нет способа напрямую выполнить какой-либо запрос к вновь созданной таблице или даже получить ее имя.Я не знаю, что вы имеете в виду под «добавить 2 функции в каждую таблицу», поскольку функции не принадлежат определенной таблице, но если вам нужно выполнить операцию, специфичную для новых таблиц, это может быть не для вас.

2 голосов
/ 23 марта 2012

Вы ищете "Триггеры DDL". Они не реализованы в PostgreSQL. Также вы не можете добавлять триггеры в системные таблицы. Посмотрите на эту запись на форуме:

Добавление триггера аудита ddl

...