尝试在 Postgres 9.3 上设置新的 data_directory

alx*_*lvt 7 postgresql postgresql-9.3

Ubuntu 14.04,最近安装了 Postgres 9.3。

尝试为附加的更大硬盘驱动器 (/data) 设置新的 data_directory,我更改了 postgresql.conf 文件以反映这一点。

但是,尝试重新启动服务器时出现此错误:

user@server:/etc/postgresql/9.3/main$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.3 database server                                     
 * Error: pid file is invalid, please manually kill the stale server process.
Run Code Online (Sandbox Code Playgroud)

我没有太多设置 Postgres 的经验,所以我不确定从这里开始做什么,而且谷歌搜索也没有提供快速答案。

Cra*_*ger 7

Ubuntu 和 Debian 用于pg_wrapper管理 PostgreSQL。它在postgresql-common包裹里。

(因此,此答案不适用于 RHEL/CentOS/Fedora)。

如果没有有价值的数据,您可以使用pg_dropcluster(部分pg_wrapper)删除(删除)旧的数据目录。这将破坏其中的所有数据。然后使用pg_createcluster/data. 这是最简单的,但当然是破坏性的。

如果您想保留数据,您必须:

  • 确保新存储上的文件系统与 PostgreSQL 兼容。不要试图将 PostgreSQL 放在 FAT32 / vfat 上。我也不会尝试在 Linux 上使用 NTFS。
  • 创建每个目录,直到您想要用于新数据目录的位置。
  • 确保postgres用户至少x拥有从数据目录到/目录的所有目录的权限,特别是包括挂载点。您可能希望chmod a+x沿路径的每个目录,或chgrp postgreschmod g+x它。
  • 停止 PostgreSQL
  • mv将数据目录(如 所示)复制pg_lsclusters到所需的新位置。如果您改为复制它,请使用cp -aRv以确保正确保留权限。不要只移动所有内容,移动目录本身。
  • 编辑/etc/postgresql/mypgversion/postgresql.conf并更改data_directory为指向新的数据目录位置。
  • 启动 PostgreSQL

我认为您犯的错误是,上面以粗体显示,您未能在移动 datadir 之前停止 PostgreSQL。它不会停止服务器,因为它不确定它会杀死正确的进程,所以它拒绝采取行动。你必须:

sudo pkill -u postgres
Run Code Online (Sandbox Code Playgroud)

然后通过确保这不返回任何结果来确保所有 PostgreSQL 进程都已退出(非常重要):

ps -u postgres
Run Code Online (Sandbox Code Playgroud)

然后才尝试再次启动服务器。

从不删除postmaster.pid


Son*_*riz 0

做到这一点的一个好方法是将 PGDATA ( /var/lib/postgresql/9.3/main) 符号链接到/data. 这样做不需要改变postgresql.conf