如何自定义 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 数据库的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建自定义函数来分析 postgres 中的表

Spring Boot jdbc模板在自定义模式下的postgres中找不到表

Postgres:将自定义类型从 Java 传递给 postgres 函数

如何将Postgres备份文件.backup导入到新的数据库中

为 Postgres 分区创建自定义哈希运算符

自定义窗口函数忽略 Postgres 中的空值