带有自定义PGDATA的Centos 7上的Postgresql 9.3

时间:2014-11-10 14:31:16

标签: linux database postgresql system-administration centos7

我正在尝试在Centos 7上安装Postgresql 9.3服务器(通过yum安装)在自定义目录中,在我的例子中是一个在启动时安装的加密分区(/ 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安装?

提前谢谢!

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

您需要在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

答案 2 :(得分:3)

试试这个:

 ## Login with postgres user
 su - postgres
 export PGDATA=/your_path/data
 pg_ctl -D $PGDATA start &

答案 3 :(得分:3)

我认为最多&#34; CentOS 7方式&#34;这样做是复制服务文件:

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/

答案 4 :(得分:0)

尝试编辑文件/etc/init.d/postgresql-9.3: PGD​​ATA = /你的/定制/路径