如何将PostgreSQL数据库(不转储)的文件系统级副本恢复到不同的PC

我是PostgreSQL的新手。 我必须恢复在寡妇XP机器上运行的数据库。

我有postgres的zip文件夹。

我已经提取postgres安装在不同的PC和启动使用initDB并创build一个新的数据库,我能够login,但我不能够看到任何旧表。

您能否将您在另一台Windows XP机器上启动服务器的步骤以及如何恢复旧数据文件夹中的表和数据?

理想情况下,你可以用pg_dump做一个转储,这样做会更容易一些。 坏办公室的人,没有cookies。

因为你有来自同一个版本的二进制文件,你可以节省一些麻烦。

  • 将您的备份目录解压到方便您作为普通用户帐户具有完全读/写权限的地方。 我将假设它在您的桌面上: C:\Users\Myusername\Desktop\postgresql – 就本示例而言。

假设c:\users\myusername\desktop\postgresql文件夹包含名为bindatalib等的文件夹:

  • 打开一个cmd.exeshell

  • cd Desktop\postgresql

  • bin\pg_ctl.exe start -DC:\users\myusername\desktop\postgresql\data

  • bin\psql.exe -U mydbusername mydb

如果psql连接成功,请使用\q命令断开连接,然后立即进行数据库转储:

  • bin\pg_dump.exe -Fc -U mydbusername -f mydb.dbbackup mydb

…并使用当前版本的pg_restore将其恢复到现代PostgreSQL版本。

如果在恢复到9.0或9.1等新版本时遇到问题,则可能需要使用新版本中的pg_dump连接到旧数据库并进行转储,而不是使用8.2中的pg_dump进行转储。 如果你不想设置转储到networking上,你可以将pg_dump从新机器复制到旧机器; 只需将新的PostgreSQL发行版中的“bin”目录拷贝到旧机器上的某个地方,然后从那里运行pg_dump即可。 单独复制只有pg_dump.exe将无法正常工作,因为它需要libpq和其他库。

请不要试图继续运行8.2,这是一个过时和不受支持的版本。 进入9.0或9.1。 这可能需要对代码进行一些更改; 请参阅自您的每个主要.0版本的发行说明 ,例如8.3.0,8.4.0,9.0.0和9.1.0以获取升级信息。

现在立即修复你的备份程序来安排一个每日pg_dump,所以这再也不会发生在你身上

如果你没有 PostgreSQL的二进制文件,你会怎么做。 当我看到你在zip文件中有二进制文件时,我已经写了它,我会保留在这里为其他人。

  • 安装PostgreSQL 8.2 。 是的,它必须是8.2.x. 没有其他版本可以用于这个目的,因为PostgreSQL的原始数据文件只能在同一个主版本中兼容。 由于它是如此旧的版本,它可能不会与已经安装的当前版本共存,因此您可能必须使用备用机器或虚拟机。

  • 一旦你安装了8.2,你知道它是由安装程序创build的空数据库的工作,closures服务控制面板(开始 – >运行 – > services.msc)

  • 将数据目录重命名为data data-empty 。 我认为这是C:\Program Files\PostgreSQL\8.2\data for 8.2,但我不记得确定。

  • 将旧的数据源解压缩到您刚刚移动安装程序创build的数据目标的位置,因此它具有相同的名称和位置。 如果您运行的是非pipe理员帐户或UACpipe理员帐户,则可能实际上需要将其解压缩到其他位置,然后将其移至原位。

  • 获取解压缩的数据目录的属性。 在安全选项卡中,给予“postgres”用户完全控制,并将其应用于其中的所有文件和文件夹。 这个很重要; 如果没有正确的权限,数据库将无法正常工作,解压后的副本将没有正确的权限。

  • 从services.msc启动PostgreSQL服务

  • 检查以确保服务正确启动。 如果没有,请在事件查看器中查看原因信息。 还要检查pg_log目录中的日志,并确保一切看起来合理,这里没有错误。

  • 尝试与psql连接,看看你是否可以访问你的数据。 如果可以,请按照上面的build议做一个转储。 不要继续使用过时的数据库版本。

这样做使用Postgres.app工具是非常容易的。

刚刚去了首选项,改变了数据目录,并重新启动服务器。 就是这样。 我很惊讶 我认为在我的情况下版本是相同的。

克雷格林格的工作为我。

但是对于那些在我的Windows 10上安装Postgresql 8.2有困难的人,我build议创build一个Windows XP虚拟盒来实现。