您可以通过log_fdw插件来查询CSV格式的数据库日志。

前提条件

  • PolarDB PostgreSQL版默认不产生CSV格式的数据库日志,需要将GUC参数log_destination的值修改为csvlog
  • 支持的PolarDB PostgreSQL版的版本如下:
    • PostgreSQL 14(内核小版本14.5.1.0及以上)
    • PostgreSQL 11(内核小版本1.1.27及以上)
    说明 您可通过如下语句查看PolarDB PostgreSQL版的内核小版本的版本号:
    • PostgreSQL 14
      select version();
    • PostgreSQL 11
      show polar_version;

背景信息

log_fdw插件提供如下两个函数,帮助您查询数据库日志。
  • list_postgres_log_files():列出pg_log目录下所有的CSV格式的日志文件。
    说明 log_fdw也提供了一个名为list_postgres_log_files的视图,用于查询日志目录下所有CSV格式的日志文件。
  • create_foreign_table_for_log_file('table_name', 'log_server', 'log_file'):对指定的CSV日志文件创建外部表,查询这个外部表即可查询日志内容。
    说明 其中:
    • table_name:外部表名称。
    • log_server:已创建的外部服务器名称。
    • log_file:CSV日志文件名称。

使用指南

  1. 创建log_fdw插件。
    create extension log_fdw;
  2. 创建外部数据库服务器。

    使用log_fdw创建一个名为log_server的虚拟外部服务器,映射到PostgreSQL数据库中。示例如下:

    create server log_server foreign data wrapper log_fdw;
  3. 调用list_postgres_log_files()函数,列出所有的csvlog文件。
    select * from list_postgres_log_files();
    显示结果如下:
                file_name             | file_size_bytes
    ----------------------------------+-----------------
     postgresql-2022-08-24_080308.csv |            1235
    (1 row)
  4. 创建外部表。
    select create_foreign_table_for_log_file('ft1', 'log_server', 'postgresql-2022-08-24_080308.csv');
    显示结果如下:
     create_foreign_table_for_log_file
    -----------------------------------
     t
    (1 row)
  5. 查询外部表(即查询相对应的CSV日志文件)。
    select log_time, message from ft1 order by log_time desc limit 2;
    显示结果如下:
              log_time          |                  message
    ----------------------------+-------------------------------------------
     2022-08-24 08:04:36.699+00 | vfs open dir pg_log, num open dir 1
     2022-08-24 08:03:53.687+00 | create reference for flog_index_insert_bg
    (2 rows)
  6. 卸载插件。
    drop extension log_fdw;