我有两个 postgresql 安装:
$ sudo /etc/init.d/postgresql status
9.1/main (port 5432): online
9.2/main (port 5433): online
我习惯于重新启动 postgres 数据库,执行以下操作:
$ sudo /etc/init.d/postgresql restart
……但是现在有两个,怎么选择重启哪一个呢?
更新:根据我从Micah Yoder收到的答案,我做了一个:
/usr/lib/postgresql/9.2/bin/pg_ctl -D /var/lib/postgresql/9.2/main restart
遇到“无法打开 PID 文件 /var/lib/postgresql/9.2/main/main/postmaster.pid 权限被拒绝”。当我尝试在sudo-i会话中运行pg_ctl时,我遇到了:
pg_ctl: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will
own the server process.
我应该如何运行pg_ctl程序?另外我不明白为什么我必须为重启指明数据文件。进程不知道它正在使用哪个数据文件吗?
更新 2 最后我放弃了pg_ctl并做了一个:
sudo /etc/init.d/postgresql restart 9.2
.. 根据公认的答案。
如果你使用的是 debian,你可以告诉 init 脚本你想要管理哪个版本:
首先,您是故意同时运行两个版本,还是只是从不同的软件包安装了 9.2 而没有删除 9.1?(Postgres 软件包现在经常以这种方式设置。)如果您已经迁移,那么应该删除 9.1。
如果你需要两者,那么每个都应该有自己的 pg_ctl 可执行文件,它可以做与普通 initscript 相同的事情。以“postgres”用户身份运行它。请参阅 .../path/bin/pg_ctl --help
您可能正在运行两个 postgresql 实例,使用存储在两个位置的两个名为 postgresql.conf 的不同配置文件。
您应该检查
/etc/sysconfig/pgsql/postgresql
配置文件以验证它使用的是哪个 pgsql/etc/init.d/postgresql
。它必须具有将存储 postgresql.conf 文件的 pgsql 目录的位置。在这个 conf 文件中,将有特定 pgsql 的端口号。