PostgreSQL CSV格式日志导入数据库

PostgreSQL 的日志可以配置成 csv 格式,csv 格式的日志能够像 excel 文件一样作为电子表格打开,也可以导入到数据库表中,使用 SQL 语句做进一步的处理和分析,比如相同 SQL 去重、分组聚合、执行时间过滤、SQL类型过滤(select/insert/update/delele)等。


原文地址:

https://www.mytecdb.com/blogDetail.php?id=238


postgresql.conf 配置如下:
  • log_directory = 'pg_log'
  • log_destination ='csvlog'
  • logging_collector = on
  • log_min_messages = error


日志表结构:

CREATE TABLE postgres_log
(
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text,
  backend_type text,
  PRIMARY KEY (session_id, session_line_num)
);
注意:pg 的日志版本与日志表的表结构版本要一致,如果日志是 pg 13 产生的,而 postgres_log 表的表结构是 pg12 的,则导入日志会报错,字段数量或者类型不兼容。


导入到数据库:

COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;


为了演示 csv 日志导入数据库,可以设置 log_statement=all,在日志中记录所有 SQL 语句,将日志导入到数据库中,进行 SQL 分析。


参考资料:

文章评论

0条评论