在Postgres日志记录机制中更改分隔符和换行符

时间:2015-12-21 14:51:46

标签: bash postgresql csv cut

我已启用postgres登录。它以CSV格式登录。第九列是实际执行的查询。我想运行cut命令来拉出第9列,但问题是查询中的逗号和换行符会破坏解析器。有没有办法更改分隔符和换行符?

1 个答案:

答案 0 :(得分:1)

正如PostgreSQL Manual中所建议的那样,您可以使用postgres来解析自己的日志:

  • 创建临时表;
  • 将日志文件导入其中;
  • 选择所需数据。

这是一个简单的bash脚本来自动化该过程。

#!/usr/bin/env bash

psql -t << EOF
CREATE TEMPORARY 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,
  PRIMARY KEY (session_id, session_line_num)
);

COPY postgres_log FROM '$1' WITH csv;

SELECT query from postgres_log;
EOF

您可以将其运行为:./fetch-queries.sh /full/path/to/logfile.csv