Re: [GENERAL] Table create time

Поиск
Список
Период
Сортировка
От Melvin Davidson
Тема Re: [GENERAL] Table create time
Дата
Msg-id CANu8Fiz=V3yv-0UeErhBO+-L5=NGB445XcVE0_n-DxyrXWYdaQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [GENERAL] Table create time  (Melvin Davidson <melvin6925@gmail.com>)
Список pgsql-general


On Thu, Aug 31, 2017 at 11:46 AM, Melvin Davidson <melvin6925@gmail.com> wrote:


On Thu, Aug 31, 2017 at 11:26 AM, Achilleas Mantzios <achill@matrix.gatewaynet.com> wrote:
On 31/08/2017 18:20, Melvin Davidson wrote:
>you could just create an event trigger looking for CREATE TABLE as filter_value:

I have tried that. Unfortunately, I have been unable to extract the table name from the event because TG_TABLE_NAME is not
available during an event trigger, albeit perhaps I am missing something?
You need to use ddl_command_end event and then select from pg_event_trigger_ddl_commands() . Search for some example how to do this.
That being said, I still believe it is extra work that could easily be avoided and should be added to the postgresql catalogs simply to be
more feature competitive with  Oracle & SQL Server, as well as a boost to the PostgreSQL community.

On Thu, Aug 31, 2017 at 10:54 AM, Michael Paquier <michael.paquier@gmail.com> wrote:
On Thu, Aug 31, 2017 at 10:21 PM, Melvin Davidson <melvin6925@gmail.com> wrote:
> Wolfgang, as David said, a column in pg_class for the creation time of a table does not exist. I long ago requested that feature as it is
> in other DB's (Oracle & MS SQL Server), but the main reason that it was not done was that no one was interested in doing it.

Is there any need for a column in pg_class for that? You could just
create an event trigger looking for CREATE TABLE as filter_value:
https://www.postgresql.org/docs/9.6/static/sql-createeventtrigger.html
And then have this event trigger just save the timestamp value of
now() in a custom table with the name and/or OID of the relation
involved.
--
Michael



--
Melvin Davidson
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.

Achilleas Mantzios
IT DEV Lead
IT DEPT
Dynacom Tankers Mgmt

>You need to use ddl_command_end event and then select from pg_event_trigger_ddl_commands()

I have, but the result for CREATE TABLE is an error.

CREATE OR REPLACE FUNCTION public.fn_notify_ddl()
  RETURNS event_trigger AS
$BODY$
DECLARE
    obj record;
BEGIN
    RAISE NOTICE 'Type: %', TG_TAG;
    RAISE NOTICE 'Command: %', current_query();
    RAISE NOTICE 'Table: %', (pg_event_trigger_ddl_commands()).objid;   -- < causes an error?
    RAISE NOTICE 'DB Name: %', current_database();
    RAISE NOTICE 'DB User: %', session_user;
    RAISE NOTICE 'DB Port: %', inet_server_port();
    RAISE NOTICE 'Server Host: %', inet_server_addr();
    RAISE NOTICE 'Client Host: %', inet_client_addr();
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.fn_notify_ddl()
  OWNER TO postgres;


CREATE TABLE sneaky_pete
( id_col varchar(5),
  col2   varchar(1),
  CONSTRAINT sneaky_pete_pk PRIMARY KEY (id_col)
);

ERROR:  query "SELECT (pg_event_trigger_ddl_commands()).objid" returned more than one row

--
Melvin Davidson
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.


Wolfgang,

Kudos to Álvaro Herrera! Thanks to his slide presentation Capturing DDL Events
I was able to figure out how to trap and log table creates. See the attached log_tbl_cre8.sql for my solution
that I am passing on to help you and others.

--
Melvin Davidson
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.

Вложения

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [GENERAL] Problem with Lateral ?
Следующее
От: scott ribe
Дата:
Сообщение: [GENERAL] RemoveIPC problem