如何自定义 Linux 服务器上 Postgres 数据库的位置?
Posted
技术标签:
【中文标题】如何自定义 Linux 服务器上 Postgres 数据库的位置?【英文标题】:How do you customize the location of Postgres databases on a Linux server? 【发布时间】:2017-02-22 03:19:00 【问题描述】:我使用 CentOS 7.3 作为 Oracle VirtualBox 的来宾 VM。主机是 Windows 7,我有一个物理 USB 棒(又名闪存驱动器)来存放 Postgres 的数据目录。我可以使用 U 盘作为 Linux 中的挂载目录。我可以读取和写入文件。
我希望能够在我的 U 盘上拥有 Postgres 数据库。但我无法在我的 U 盘上获取 Postgres 数据库。我在 Linux VM 上安装了 Postgres。
要更改 Postgres 的默认数据目录,我遵循了这些 directions。
如果你没有时间去链接,我只是用这两个命令安装了 Postgres:
yum -y install postgresql-server postgresql-contrib
postgresql-setup initdb
然后我运行了这两个命令:
mv /var/lib/pgsql/data/* /mnt/windows-share/data
ln -s /mnt/windows-share /var/lib/pgsql/data
之后我尝试启动 Postgres 服务,但出现错误。
这是我尝试的命令(以 root 身份):
systemctl 启动 postgresql
这是错误:
postgresql.service 的作业失败,因为控制进程已退出 带有错误代码。请参阅“systemctl status postgresql.service”和 “journalctl -xe”了解详情。
我试过systemctl status postgresql.service
,我发现了这个:
已加载:已加载(/usr/lib/systemd/system/postgresql.service;已禁用 vendorpreset:禁用)
活动:失败(结果退出代码)...处理... ExecStartPre=/usr/bin/postgresql-check-db-dir $PGDATA (code=exited, 状态=1/失败)
... 无法启动 PostgreSQL... ...单元 postgresql.service... ...postgresql.service 失败
我使用了journalctl -xe
,但这并没有告诉我任何有意义的事情。
为了改变 Postgres 的默认数据目录,我尝试了这个:
postgresql-setup initdb --pgdata=/mnt/windows-share/
但我得到了
在 --pgdata=/mnt/mar/data.service 中找不到 PGDATA 设置
如何使用自定义数据目录安装 Postgres?我需要它位于“/mnt/”目录中。我想在 U 盘上创建我所有的数据库。
【问题讨论】:
postgres 用户是否在正确的组中访问共享文件夹? 【参考方案1】:要在自定义位置(例如 home/postgres 目录)安装 Postgres,请按照以下步骤操作
安装所需版本的 Postgres,例如13 在 Home 中创建 postgres 目录。并将其访问权限授予 posgres 用户
mkdir postgres
chown postgres:postgres postgres
usermod -m -d /home/postgres postgres
将数据目录移动到新位置:
rsync -av /var/lib/pgsql/ /home/postgres/
将 postgres 服务器中的位置更新为:
find / -name postgresql-9.5.service
vi /usr/lib/systemd/system/postgresql-9.5.service
更新文件中的数据位置:
从旧位置,例如
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/13/data/
到新位置,例如
# Location of database directory
Environment=PGDATA=/home/postgres/13/data/"
停止 postgres,重新加载守护进程并启动 postgres
stop postgres
systemctl daemon-reload
start postgres
完成...
【讨论】:
【参考方案2】:我在 CentOS 6 上解决了同样的问题 也许你可以试试。
-
添加您的磁盘
检查您的磁盘是否存在(在我的情况下,新磁盘是 /dev/sdb1/)
# fdisk -l
挂载新磁盘
# mkdir /hdd2
# mount -t ext3 /dev/sdb1 /hdd2/
通过添加新行自动挂载硬盘:
# vi /etc/fstab 添加行:/dev/sdb1 /hdd2 ext3 defaults 0 0
配置 postgres
# service postgresql 停止
# vi /etc/sysconfig/pgsql/postgresql 添加行:PGDATA=/hdd2/data
#service postgresql start
希望对你有用!!
【讨论】:
我没有文件“/etc/sysconfig/pgsql/postgresql”。我有这些文件: 1) /run/postgresql 2) /etc/selinux/targetd/active/modules/100/postgresql 3) /etc/pam.d/postgresql 4) /usr/libexec/initscripts/legacy-actions/ postgresql 我该怎么办? @Alex111 你的系统是Redhat,对吧??您可以在此路径3) /etc/pam.d/postgresql
尝试配置。如果你有任何事情请告诉我。以上是关于如何自定义 Linux 服务器上 Postgres 数据库的位置?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot jdbc模板在自定义模式下的postgres中找不到表
Postgres:将自定义类型从 Java 传递给 postgres 函数