我是 PostgreSQL 新手。我必须恢复在 Windows XP 机器上运行的数据库。
我有 postgres 的 zip 文件夹。
我已经在另一台电脑上提取了 postgres 安装并开始使用 initDB 并创建了一个新的数据库,我能够登录,但我看不到任何旧表。
您能否发布在另一台 Windows XP 机器上启动服务器的步骤以及如何恢复旧数据文件夹中的表和数据?
答案1
理想情况下,你应该使用 pg_dump 进行转储,这样会容易得多。办公室人员不好,没有 cookie。
因为您拥有来自同一版本的二进制文件,所以您可以省去一些麻烦。
- 将备份目录解压到您拥有普通用户帐户的完全读/写权限的方便位置。我假设它在您的桌面上:
C:\Users\Myusername\Desktop\postgresql
- 出于本示例的目的。
假设文件夹包含名为、、等的c:\users\myusername\desktop\postgresql
文件夹:bin
data
lib
打开
cmd.exe
shellcd Desktop\postgresql
bin\pg_ctl.exe start -D C:\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 进行转储。如果您不想设置通过网络进行转储,您可以将 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\data
于 8.2,但我记不太清楚。将旧数据目录解压到您刚刚移动安装程序创建的数据目录的位置,以便它具有相同的名称和位置。如果您运行的是非管理员或 UAC 管理员帐户,您可能实际上必须将其解压到其他地方,然后将其移动到位。
获取解压后数据目录的属性。在安全选项卡中,授予“postgres”用户完全控制权,并将其应用于其中的所有文件和文件夹。这很重要;如果没有正确的权限,数据库将无法工作,解压后的副本也不会具有正确的权限。
从 services.msc 启动 PostgreSQL 服务
检查以确保服务正确启动。如果没有,请在事件查看器中查找原因信息。还要检查
pg_log
datadir 目录中的日志,确保一切正常,那里没有错误。尝试连接
psql
并查看是否可以访问数据。如果可以,请按照上述建议进行转储。不要继续使用过时的数据库版本。
答案2
使用 Postgres.app 工具执行此操作非常容易。
只需转到“首选项”,更改数据目录,然后重新启动服务器即可。就是这样。我非常惊讶。我认为在我的情况下版本是相同的。
答案3
Craig Ringer 为我工作。
但是对于像我一样在 Windows 10 上安装 Postgresql 8.2 有困难的用户,我建议创建一个 Windows XP 虚拟盒来执行此操作。