我正在使用带有多个数据库的 PostgreSQL (8.3)...我想知道是否有某种方法可以记录所做的查询仅有的在其中一个数据库中(不是全部)。
或者每个数据库有一个日志文件......
我知道我可以用来log_line_prefix = "%d"
记录数据库的名称,然后进行过滤,但这不是问题。
我是否应该使用 log_analyzer 来解决这个问题?你有什么建议吗?
谢谢
答案1
是的,这是可能的,您可以设置配置参数log_statement
每个数据库:
ALTER DATABASE your_database_name
SET log_statement = 'all';
答案2
如果你通过 Postgres 记录语句,那么据我所知,没有办法在每个数据库中执行此操作(除非编写一个调用日志记录触发器的视图)每张桌子——显然不现实)。
最好的解决方案就是你所描述的(在每行前面加上数据库名称),并将数据提供给类似syslog-ng
将查询日志按数据库拆分。
对日志文件进行后处理也是一种选择,但请注意,对于具有大量查询的数据库集群,可能会出现潜在问题(操作系统/文件系统最大文件大小限制、磁盘空间耗尽)。
另请注意,记录所有查询确实会降低性能 - 性能损失的大小取决于查询的大小...