Getting the exact SQL from inside an event trigger - Mailing list pgsql-general

From Joe Wildish
Subject Getting the exact SQL from inside an event trigger
Date
Msg-id 10164c95-ef23-4624-9251-ea6ff594cd1c@app.fastmail.com
Whole thread Raw
Responses Re: Getting the exact SQL from inside an event trigger
List pgsql-general
Hello all,

We are using event triggers to capture DDL for subsequent replay on a logical replica.

The intention is to write the DDL statement to a table, inside the same transaction that executes the DDL, and have a
separateprocess on the replica notice changes in this table and execute whatever it finds.
 

We have declared a trigger on the ddl_command_end event for this purpose.  We can get the SQL from running
current_query()inside the trigger; oddly, the pg_event_trigger_ddl_commands() function does have an attribute called
"command",typed as "pg_ddl_command", but there are no SQL functions that can operate on this type, including turning it
intoa string.
 

This process works for a simple case of e.g. "CREATE TABLE t()".

However, in other cases --- e.g. "DO $$ BEGIN CREATE TABLE t(); CREATE TABLE s(); END; $$;" --- the trigger will fire
foreach CREATE TABLE but the current_query() will evaluate to the entire DO block.
 

This makes it difficult to capture just the actual statement that is being executed.  I am looking for a way to get the
precisestatement that is being executed from within the ddl_command_event trigger function.  Does anyone know if this
ispossible?
 

Thanks,
-Joe







pgsql-general by date:

Previous
From: Dominique Devienne
Date:
Subject: Re: Postgres Index and Updates
Next
From: hubert depesz lubaczewski
Date:
Subject: Re: Getting the exact SQL from inside an event trigger