PostgreSQL - 限制总日志大小

elB*_*rde 6 postgresql logging

我有一个非常简单的要求 - PostgreSQL 日志目录应该有固定的最大大小,例如所有 PostgreSQL 日志的最大大小为 10 GB。

它可以通过创建固定大小的日志并使用日志轮换(例如轮换10个日志文件,每个日志文件1 GB)来实现。

我尝试使用 PostgreSQL 日志记录配置进行设置,但没有成功。问题是“log_truncate_on_rotation”不适用于基于大小的旋转,仅适用于基于时间的旋转。

所以,我的问题是 - 可以仅使用 PostgreSQL 配置来实现还是我必须使用其他东西?如果没有,为什么 PostgreSQL 没有这个功能?

我有几个选择:

  • 使用“log_rotation_size”属性将最大文件大小设置为 1 GB,然后设置 CRON 作业,如果文件计数超过 10,该作业将删除最旧的文件
  • 使用 logrotate 实用程序,但我必须每天执行一次以上

Vao*_*sun 3

是的 - 你是对的,没有这样的功能 - 你需要一个 cron

https://www.postgresql.org/docs/current/static/runtime-config-logging.html

log_truncate_on_rotation(布尔值)

当启用logging_collector时,此参数将导致PostgreSQL截断(覆盖)而不是附加到任何现有的同名日志文件。但是,仅当由于基于时间的轮换而打开新文件时才会发生截断,而不是在服务器启动或基于大小的轮换期间发生。

您甚至可以设置每分钟的作业来检查日志数量:

* * * * * rm $(ls -t /PGDATA/pg_log/* | tail -n 1)
Run Code Online (Sandbox Code Playgroud)