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

Mut*_*l P 3 postgresql windows backup database-restore

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

我有 postgres 的 zip 文件夹。

我已经在另一台 PC 中提取了 postgres 安装并开始使用 initDB 并创建了一个新数据库,我能够登录,但我看不到任何旧表。

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

Cra*_*ger 7

理想情况下,您会使用 pg_dump 进行转储,这会使这变得更容易。糟糕的办公室人,没有饼干。

因为您拥有来自同一版本的二进制文件,所以可以省去一些麻烦。

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

假设该c:\users\myusername\desktop\postgresql文件夹中包含的文件夹命名bindatalib,等:

  • 打开cmd.exe外壳

  • cd Desktop\postgresql

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

  • bin\psql.exe -U mydbusername mydb

如果 psql 连接 OK 断开与\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 进行转储。如果您不想设置为通过网络转储,您可以将 pg_dump 从新机器复制到旧机器;只需将整个“bin”目录从新的 PostgreSQL 版本复制到旧机器上的某个位置,然后从那里运行 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 并且您知道它正在使用安装程序创建的空数据库,请从服务控制面板将其关闭(开始 -> 运行 -> services.msc)

  • 将数据目录重命名为类似data-empty. 我认为这是C:\Program Files\PostgreSQL\8.2\data8.2,但我不记得了。

  • 将旧的 datadir 解压缩到刚刚移动安装程序创建的 datadir 的位置,因此它具有相同的名称和位置。如果您运行的是非管理员或 UAC 管理员帐户,您实际上可能需要将其解压缩到其他地方,然后将其移动到位。

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

  • 从 services.msc 启动 PostgreSQL 服务

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

  • 尝试连接psql并查看您是否可以访问您的数据。如果可以,请按照上面的建议进行转储。不要继续使用过时的数据库版本。