CentOS 7中Postgres服务的环境变量

5

最近我遇到了一个问题,需要使用自定义的PGDATA路径来启动postgresql服务。默认数据目录(/var/lib/pgsql/9.3/data/)未初始化,因此触发了这些错误。问题似乎在于Centos 7上的服务启动程序会剥离所有环境变量,包括PGDATA。

这是一个关于该问题的有趣讨论

是否存在一种配置方式

service postgresql-9.3 start

如何使用自定义环境变量?是否有配置文件需要定义这些变量?

提前感谢你的回答!


正如该链接所述,这个通用机制的原理是当服务运行时,服务 init 文件会从 /etc/default/$servicename 路径下引用一个文件,并在那里配置变量。pgsql 的 init 脚本是否也这样做呢?我不知道,你需要去查看一下。 - Etan Reisner
我在 /etc/default/ 目录下只有 [grub nss useradd] 文件。我是否需要相应地在该目录下创建一个特殊的 postgresql-9.3 脚本? - Vitaly Stanchits
你需要查看postgresql init.d文件。看看它是否在/etc/default目录中寻找文件,然后使用所需的任何变量等创建该文件。 grep /etc/rc.d/init.d/postgresql-9.3 /default可能是一个不错的开始。 - Etan Reisner
我对 /etc/rc.d/init.d/postgresql 进行了更改,对我来说有效。我想我是从 https://github.com/postgres/postgres/blob/master/contrib/start-scripts/linux 获取的。 - Jayadevan
我按照/usr/lib/systemd/system/postgresql-9.3.service中的注释创建了文件/etc/systemd/system/postgresql-9.3.service,并在其中设置了PGDATA变量。但出于某种原因,它仍然不接受这个变量。 - Vitaly Stanchits
2个回答

13

感谢上面的回答,我们今天刚刚遇到了这个变化。 您还可以保留默认设置,并通过将以下内容放入/etc/systemd/system/postgresql-9.3.service中仅覆盖PGDATA变量:

# Include the default config:
.include /lib/systemd/system/postgresql-9.3.service

[Service]
Environment=PGDATA=<your path here>/pgsql/9.3/data

这样做可以避免重新将/usr/lib/systemd/system/postgresql-9.3.service中的更改重新集成到您的本地副本中。


这个解决方案更好,因为它保留了原始服务文件中的所有更改。 - Strahinja Kustudic
2
这里也需要使用 systemctl daemon-reload 命令。 - Robert Kubiak
你的路径代表什么? - Kannan Ramamoorthy
@KannanRamamoorthy 这意味着您希望存储数据库文件的路径,通常是不同的驱动器,以便您不会用尽空间。 - user1717828

5

好的,我有一个解决方案适用于我的情况。

nano /etc/systemd/system/postgresql-9.3.service 

将内容从 /usr/lib/systemd/system/postgresql-9.3.service 复制过来,并更改 PGDATA 变量。然后

systemctl daemon-reload

然后我正常启动服务,一切都运行良好。诀窍在于修改该服务的配置文件。


1
不是非常优雅的解决方案,更像是一个hack,但它确实可以工作。 - Adesso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接