pg_current_logfile() 是一个系统函数,它将返回当前正在使用的日志文件的路径。
pg_current_logfile() 在 PostgreSQL 10 中被添加。
用法
pg_current_logfile ( [ text ] ) → text
pg_current_logfile(),当不带参数调用时,将按以下优先级顺序返回以下之一:
- 当前
stderr日志输出被定向到的日志文件路径 - 当前
csvlog日志输出被定向到的日志文件路径 NULL
要返回这两种日志类型之一的日志文件路径,请将 'stderr' 或 'csvlog' 作为函数参数值传递。有关示例,请参见下文。
pg_current_logfile() 只能由超级用户、预定义角色 pg_monitor (PostgreSQL 17 及更高版本)的成员,或者被授予该函数执行权限的用户执行,例如使用:
GRANT EXECUTE ON FUNCTION pg_catalog.pg_current_logfile() TO someuser
GRANT EXECUTE ON FUNCTION pg_catalog.pg_current_logfile(text) TO someuser
实现
pg_current_logfile() 是一个辅助函数,它报告位于数据目录最顶层文件 current_logfiles 的内容。
变更历史
- PostgreSQL 17
- 可以由预定义角色 pg_monitor 的成员执行(提交 8d8afd48)
- PostgreSQL 10
- 添加(提交 19dc233c)
示例
pg_current_logfile() 的基本执行示例
postgres=# SHOW log_destination; log_destination ----------------- stderr,csvlog (1 row) postgres=# SELECT * FROM pg_current_logfile(); pg_current_logfile ------------------------------ /var/log/pgsql/postgresql.log (1 row) postgres=# SELECT * FROM pg_current_logfile('csvlog'); pg_current_logfile ------------------------------ /var/log/pgsql/postgresql.csv (1 row)
使用无效参数执行 pg_current_logfile()
postgres=# SELECT * FROM pg_current_logfile('foo');
ERROR: log format "foo" is not supported
HINT: The supported log formats are "stderr" and "csvlog".
参考资料
- PostgreSQL 文档: pg_current_logfile()
有用链接
- Postgres 10 highlights - Tracking of current logfiles - Michael Paquier 于 2017 年 3 月的博客文章
