我正在尝试在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安装?
提前谢谢!
答案 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: PGDATA = /你的/定制/路径