如何让 postgresql 只在日志中记录 DDL 语句?



只想在postgresql日志中使用DDL语句。

我已经将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 补丁以同步生产环境中的数据库。 有没有更好的方法?

查看 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日志

最新更新