Re: How to watch for schema changes

Поиск
Список
Период
Сортировка
От Guillaume Lelarge
Тема Re: How to watch for schema changes
Дата
Msg-id CAECtzeUjstFC2j66NRPne6v_vHYe+wN+Zo_-LY5z_qeh3R8DzA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: How to watch for schema changes  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
2018-07-12 6:12 GMT+02:00 Adrian Klaver <adrian.klaver@aklaver.com>:
On 07/11/2018 08:46 PM, Igor Korot wrote:
Hi, guys,


On Mon, Jul 9, 2018 at 5:38 PM, Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 07/09/2018 01:49 PM, Igor Korot wrote:

Hi, Adrian

On Tue, Jul 3, 2018 at 1:24 PM, Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

On 07/03/2018 11:15 AM, Igor Korot wrote:


Adrian,

On Tue, Jul 3, 2018 at 12:32 PM, Adrian Klaver
<adrian.klaver@aklaver.com> wrote:


On 07/03/2018 10:21 AM, Igor Korot wrote:



Hi, ALL,
Is there any trigger or some other means I can do on the server
which will watch for CREATE/ALTER/DROP TABLE command and after
successful
execution of those will issue a NOTIFY statement?




https://www.postgresql.org/docs/10/static/event-triggers.html



According to the documentation the lowest version it supports is 9.3.
Anything prior to that?

I'm working with OX 10.8 and it has 9.1 installed.


9.1 went EOL almost two years ago. The oldest supported version is 9.3,
though it will go EOL this September:

https://www.postgresql.org/support/versioning/

Are you forced to work with 9.1 or can you use something from here:

https://www.postgresql.org/download/macosx/

to get a newer version? FYI that will be a major upgrade so will require
a
dump/restore or use of pg_upgrade.


Just a thought...
Is it possible to create a trigger for a system table? Or this
operation is restricted


Easy enough to test. As postgres super user:

test_(postgres)# create trigger info_test before insert on pg_class execute
procedure ts_update();

ERROR:  permission denied: "pg_class" is a system catalog

But

draft=# CREATE TRIGGER info_test AFTER INSERT ON
information_schema.tables EXECUTE PROCEDURE test();
ERROR:  function test() does not exist

So it looks like this should be possible?

No, see:

https://www.postgresql.org/docs/10/static/sql-createtrigger.html

AFTER trigger on views are STATEMENT level only.

https://www.postgresql.org/docs/10/static/plpgsql-trigger.html

"NEW

    Data type RECORD; variable holding the new database row for INSERT/UPDATE operations in row-level triggers. This variable is unassigned in statement-level triggers and for DELETE operations.
OLD

    Data type RECORD; variable holding the old database row for UPDATE/DELETE operations in row-level triggers. This variable is unassigned in statement-level triggers and for INSERT operations.
"

So you won't know what was INSERTed in row.


Moreover, there is nothing inserted into this view. It's inserted into pg_class, and an access to information_schema.tables just reads that catalog.



Thank you.



for when the server is actually being set-up?

Successful "CREATE TABLE..." statement creates a row inside the
information_schema.tables
so if I can create a trigger after this record is inserted or deleted
that should be fine.

Thank you.



And a second question - how do I work with it?
I presume that function will have to be compiled in its own module
(either dll, so or dylib).
But then from the libpq interface how do I call it?



It can use functions written in PL languages. See below:

https://www.postgresql.org/docs/10/static/sql-createeventtrigger.html

for an example written in plpgsql.






Thank you.



Thank you.



--
Adrian Klaver
adrian.klaver@aklaver.com




--
Adrian Klaver
adrian.klaver@aklaver.com



--
Adrian Klaver
adrian.klaver@aklaver.com



--
Adrian Klaver
adrian.klaver@aklaver.com




--
Guillaume.

В списке pgsql-general по дате отправления:

Предыдущее
От: Abelardo León González
Дата:
Сообщение: Stored function | Grayed out option when I try modify the return type
Следующее
От: Andreas Kretschmer
Дата:
Сообщение: Re: Stored function | Grayed out option when I try modify the returntype