Как сделать, чтобы postgresql записывал только оператор DDL в логах? - PullRequest
0 голосов
/ 15 мая 2018

Я хочу только операторы DDL в журналах postgresql.

Я установил log_statement на ddl , и изменил log_min_messages на 'log' ,, но я все еще получил журнал, подобный этому:

< 2018-05-15 05:10:25.078 EDT > LOG:  MultiXact member wraparound protections are now enabled  
< 2018-05-15 05:10:25.079 EDT > LOG:  database system is ready to accept connections  
< 2018-05-15 05:10:25.085 EDT > LOG:  autovacuum launcher started

Мне нужны только операторы DDL, потому что я хочу создать патч DDL из журнала для синхронизации базы данных в производственной среде. Есть ли лучший способ?

1 Ответ

0 голосов
/ 15 мая 2018

заглянуть в https://github.com/pgaudit/pgaudit или если вы хотите его кодировать, рассмотрите возможность использования https://www.postgresql.org/docs/current/static/event-triggers.html

например:

so=# create or replace function notice_ddl() returns event_trigger as $$
begin
raise info '%', session_user || ' ran '||tg_tag||' '||current_query();
end;
$$ language plpgsql;
CREATE FUNCTION
so=# create or replace function notice_ddl() returns event_trigger as $$
begin
raise info '%', session_user || ':: ran "'||tg_tag||'" ('||current_query()||')';
end;
$$ language plpgsql;
CREATE FUNCTION
so=# create event trigger etg on ddl_command_start execute procedure notice_ddl();
CREATE EVENT TRIGGER
so=# create table so(i int);
INFO:  vao:: ran "CREATE TABLE" (create table so(i int);)
CREATE TABLE

несомненно, вы можете сохранить выписку в таблицу канала уведомлений вместо того, чтобы получать информацию ...

также, если вы хотите использовать логи postgres, посмотрите логи csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...