【问题标题】:Change delimiter and newline character in Postgres logging mechanism在 Postgres 日志记录机制中更改分隔符和换行符
【发布时间】:2016-03-27 16:34:22
【问题描述】:

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

【问题讨论】:

    标签: bash postgresql csv cut


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 2013-12-10
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2012-02-02
      • 2011-11-02
      相关资源
      最近更新 更多