如何在通过YUM repo作为默认守护程序用户安装时在centos上运行postgres

时间:2012-10-17 18:32:21

标签: postgresql centos

在Centos 6上通过yum存储库安装了新版本的Postgres 9.2,如果将postgres配置为以'postgres:postgres'(u:g)开箱即用,如何以不同的用户身份运行?< / p>

2 个答案:

答案 0 :(得分:4)

除了AndrewPK的解释之外,我还要注意你也可以通过停止和禁用系统Pg服务来启动新的PostgreSQL实例,然后使用:

initdb -D /path/to/data/directory
pg_ctl start -D /path/to/data/directory

但是,这不会在启动时自动启动服务器。为此,您必须集成到您的init系统中。在CentOS 6上,/etc/init.d/中的一个简单的System V风格的init脚本和一个合适的符号链接到/etc/rc3.d/或/etc/rc3.d/(取决于默认的运行级别)就足够了。

如果一次运行多个实例,则它们必须位于不同的端口上。更改数据库中port中的postgresql.conf指令,或者使用pg_ctl -o "-p 5433" ...在启动时进行设置。如果您的用户没有对默认套接字目录的写入权限,您可能还需要覆盖unix_socket_directories

答案 1 :(得分:1)

这仅适用于全新安装(因为它与我的情况有关),因为它涉及吹走数据目录。

我在使用打包的启动脚本进行全新安装时解决此问题的步骤:

  1. 如果您已经使用postgres user:group配置为默认的initdb进程,则删除postgres数据目录/var/lib/pgsql/9.2/data
  2. 修改启动脚本(/etc/init.d/postgresql-9.2),将postgres:postgres的所有实例替换为NEWUSER:NEWGROUP
  3. 修改启动脚本,用postgres替换$SU -l postgres行中NEWUSER的所有实例。
  4. 使用新用户名
  5. 运行/etc/init.d/postgres initdb以重新生成群集
  6. 确保创建的任何日志都归新用户所有,或者如果initdb上的错误(我的案例中的配置文件在/var/lib/pgsql/9.2/data/postgresql.conf中找到),则删除旧日志。
  7. 启动postgres,它现在应该在新用户/组下运行。
  8. 我理解这可能不是其他人想要的,如果他们有现有的postgres数据库并且想要重新启动服务器以作为不同的用户/组组合运行 - 这不是我的情况,我没有看到使用预先打包的启动脚本在任何地方发布“新鲜”安装的答案。