Macos 如何访问PostgreSQL pg_日志文件夹而不成为postgres用户并遇到权限问题?

Macos 如何访问PostgreSQL pg_日志文件夹而不成为postgres用户并遇到权限问题?,macos,postgresql,Macos,Postgresql,在我的mac os x开发机器上,我已将postgres 9.1安装到/Library/PostgreSQL/9.1,PostgreSQL的数据目录位于/Library/PostgreSQL/9.1/data中。我已配置日志记录,因此我可以从postgres中获得有关服务器上执行的sql查询的良好日志。。。。等,以便将它们写入/Library/PostgreSQL/9.1/data/pg_log我使用的是企业数据库预打包的postgres二进制文件 问题是$PGDATA归运行postgres进程

在我的mac os x开发机器上,我已将postgres 9.1安装到
/Library/PostgreSQL/9.1
,PostgreSQL的数据目录位于
/Library/PostgreSQL/9.1/data
中。我已配置日志记录,因此我可以从postgres中获得有关服务器上执行的sql查询的良好日志。。。。等,以便将它们写入
/Library/PostgreSQL/9.1/data/pg_log
我使用的是企业数据库预打包的postgres二进制文件

问题是$PGDATA归运行postgres进程的postgres用户所有。当我用
chmod o+xr data
postgres更改数据目录的权限时,postgres拒绝启动,并告诉我postgres目录除了对postgres用户之外,不能启动任何内容

FATAL:  data directory "/Library/PostgreSQL/9.1/data" has group or world access
DETAIL:  Permissions should be u=rwx (0700)
仅仅为了获取日志文件而不得不进出postgres目录是很烦人的

在Mac OS X上配置postgres日志的好方法是什么,这样就可以方便地从任何登录的用户访问日志文件,而不必使用sudo或成为postgres用户


更新查看下面我的答案,了解我使用的确切配方。

简单的事实是PostgreSQL不允许您这样做。但是,有一个更好的解决方案,那就是确保在postgresql.conf中设置以下内容:

这是默认值。如果它被注释掉了,并且没有进行其他设置,则可以:

log_destination = 'stderr' 
这需要设置为:

logging_collector = on  
然后,您可以将其指向其他地方:

log_directory = 'pg_log'  
你可以把它指向某个你可以访问的地方。例如,为postgres提供适当的访问权限并指向:

log_directory = '/var/log/postgresql'

然后,只要它不在数据目录中,您就可以设置您想要的任何权限。

我使用的步骤使它工作

  • 创建一个目录
    /var/pg_log
    ,并使其可读写
    chmod o+wxr
  • 在postgresql.conf文件中设置以下值

    log_directory='/var/pg_log'

    日志文件模式=0506

  • 重新启动postgres

  • /var/pg_log
    应该有postgres.log文件,您可以使用mac os x控制台实用程序监视这些文件。不需要sudo就可以看到里面发生了什么

注意:Postgres拒绝在日志文件上允许511以上的任何权限

你是说Postgres不允许group/other可写吗?我遵循了你的解决方案,它工作得很好,只是创建的每个新日志文件都属于Postgres用户,并且除非使用Postgres或root用户,否则不可读。是否有任何解决方案可以确保所有人都可以访问任何新创建的日志文件?好的,找到了,它是通过postgresql.conf中的log_file_mode参数实现的。