从原始物理文件中恢复postgreSQL数据库

Alv*_*vos 24 database postgresql file recover

我有以下问题,我需要知道是否有办法解决它.

我有一个足够便宜的客户拒绝在运行他的公司的主系统上购买他的postgreSQL数据库的备份计划,并且我认为有一天会发生一些操作系统文件在停电期间崩溃并且操作系统需要重新安装.

此客户端没有任何数据库备份,但我设法保存PostgreSQL主目录.我读到数据库以某种方式存储在postgres主文件夹的数据目录中.

我的问题是:有没有办法从数据文件夹中恢复数据库?我正在使用PostgreSQL 8.2在Windows环境(XP Service Pack 2)中工作,我需要在新服务器中重新安装PostgreSQL.我需要在新环境中重新创建数据库,并以某种方式将旧文件附加到新数据库实例.我知道在SQL Server中这是可能的,因为引擎存储数据库的方式,但我对postgres没有任何线索.

有任何想法吗?他们将非常感激.

Kon*_*rus 20

如果您拥有整个数据文件夹,那么您拥有所需的一切(只要架构相同).如果您没有复制某些内容,只需尝试将其恢复到另一台机器上,然后再将其擦除.

只需将数据目录保存到磁盘即可.启动Postgres时,设置参数告诉它数据目录的位置(参见:wiki.postgresql.org).或者删除全新安装的原始数据目录并将副本放在其位置.

  • 就像其他人提到的那样,请记住复制的文件必须具有正确的权限。在 linux 系统上,它们通常必须由 postgres 用户拥有,所以像 `sudo chown -R postgres:postgres /var/lib/postgresql` 这样的东西应该可以工作。 (2认同)
  • @KonradGarus 我尝试在 Windows 中的任务管理器停止 postgresql 服务后替换数据文件夹,但是当我尝试打开我的 psql shell 时它崩溃并显示错误“无法连接到服务器。连接被拒绝。服务器是否在本地主机上运行?接受端口 5432" 上的连接。请帮忙 (2认同)

kol*_*ild 6

这是可能的,您只需将"数据"文件夹(在Postgres安装文件夹中)从旧计算机复制到新计算机,但有几点需要注意.

首先,在复制文件之前,必须停止Postgres服务器服务.那么,控制面板 - >管理工具 - >服务,找到Postgres服务并停止它.完成复制文件和设置权限后,再次启动它.

其次,您需要设置数据文件的权限.因为postgres服务器实际上在另一个用户帐户上运行,所以如果你只是将它们复制到数据文件夹中,它将无法访问这些文件,因为它没有权限这样做.因此,您需要将文件的所有权更改为"postgres"用户.我必须使用subinacl,首先安装它,然后从命令提示符这样使用它(首先导航到你安装它的文件夹):

subinacl /subdirectories "C:\Program Files\PostgreSQL\8.2\data\*" /setowner=postgres
Run Code Online (Sandbox Code Playgroud)

(还应该可以从资源管理器中更改所有权:首先必须在"文件夹"选项中禁用"使用简单文件共享",然后"安全"选项卡将出现在"文件夹属性"对话框中,并且有一些选项可用于设置权限和改变所有权,但我无法这样做.)

现在,如果再次手动启动服务器服务后无法启动服务器服务,通常可以在事件查看器中查看原因(管理工具 - >事件查看器).Postgres将抛出一个错误事件,并检查它将给你一个关于问题是什么的线索(有时它会抱怨postmaster.pid文件,只是删除它,等等).