11

我正在尝试在自定义目录内的 Centos 7(通过 yum 安装)上设置 Postgresql 9.3 服务器,在我的情况下,该目录是在启动时安装的加密分区(/custom_container/database)。由于某种原因,Postgresql 的行为不像手册中那样,并且在服务启动时出错。

注意:它不想接受我设置的 PGDATA 环境变量,并且在运行时

su - postgres -c '/usr/pgsql-9.3/bin/initdb'

(假设 PGDATA 目录归 postgres:postgres 所有)集群在默认目录 /var/lib/pgsql/9.3/data/ 中初始化 唯一的改变方法是使用

su - postgres -c '/usr/pgsql-9.3/bin/initdb --pgdata=$PGDATA'

它初始化了我正在使用的自定义容器内的目录。这是我无法弄清楚的,因为文档说 PGDATA 变量是默认采用的。

问题:运行时

service postgresql-9.3 start

我收到日志错误

postgresql-9.3.service - PostgreSQL 9.3 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.3.service; disabled)
Active: failed (Result: exit-code) since Mon 2014-11-10 15:24:15 CET; 1s ago
Process: 2785 ExecStartPre=/usr/pgsql-9.3/bin/postgresql93-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Starting PostgreSQL 9.3 database server...
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: "/var/lib/pgsql/9.3/data/" is missing or empty.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: Use "/usr/pgsql-9.3/bin/postgresql93-setup initdb" to initialize t...ster.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: See %{_pkgdocdir}/README.rpm-dist for more information.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: postgresql-9.3.service: control process exited, code=exited status=1
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Failed to start PostgreSQL 9.3 database server.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Unit postgresql-9.3.service entered failed state.

这意味着 Postgresql,即使集群在新的 $PGDATA 目录(/custom_container/database)中初始化,仍然在 /var/lib/pgsql/9.3/data/ 中寻找集群

以前有没有人经历过这种 Postgresql 行为?可能是我忘记了某些配置选项还是问题来自 Postgresql 安装?

先感谢您!

4

5 回答 5

6

看来真正的问题是设置环境变量,我在以下线程中工作: Centos 7 environment variables for Postgres service 问题是在自定义 /etc/systemd/system/postgresql-9.3.service 中设置的 PGDATA 变量应该从使用默认 PGDATA var 的 /usr/lib/systemd/system/postgresql-9.3.service 的内容创建。

于 2014-11-10T17:17:11.943 回答
5

您需要在 中创建一个自定义postgresql.service文件/etc/systemd/system/,该文件会覆盖默认PGDATA环境变量。你的自定义服务文件可以.include是默认的postgresql服务文件,所以你只需要添加你想要改变的。这样,升级仍然可以修改/改进?默认服务文件中的内容,同时保留您的更改。

这就是我在 Centos 7 中的做法:

cat <<END >/etc/systemd/system/postgresql.service
.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGDATA=/mnt/postgres/data ## <== SET THIS TO YOUR WANTED $PGDATA
END

systemctl daemon-reload

systemctl restart postgresql.service

核实 :

ps -ax | grep [p]ostgres

更新:

除了手动创建文件并添加 .include 行,您还可以使用 systemd 内置方式:

systemctl edit postgresql.service

这将打开您的默认编辑器并将您的更改保存到/etc/systemd/system/postgresql.service.d/override.conf

于 2018-08-14T18:34:47.443 回答
3

尝试这个:

 ## Login with postgres user
 su - postgres
 export PGDATA=/your_path/data
 pg_ctl -D $PGDATA start &
于 2014-11-10T15:22:13.447 回答
3

我认为最“CentOS 7 方式”是复制服务文件:

sudo cp /usr/lib/systemd/system/postgresql-9.6.service /etc/systemd/system/postgresql-9.6.service

然后编辑文件/etc/systemd/system/postgresql-9.6.service

# Location of database directory
Environment=PGDATA=/mnt/volume/var/lib/pgsql/9.6/data/

然后启动它sudo systemctl start postgresql-9.6并验证:

# sudo ps -ax | grep postmaster
32100 ?        Ss     0:00 /usr/pgsql-9.6/bin/postmaster -D /mnt/volume/var/lib/pgsql/9.6/data/
于 2017-05-25T18:12:39.377 回答
0

尝试编辑文件 /etc/init.d/postgresql-9.3: PGDATA=/your/custom/path

于 2016-10-20T18:00:56.470 回答