我只想在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日志