从文件系统备份恢复PostgreSQL数据库

我有一个PostgreSQL 8.3数据目录备份。 我需要从这个备份复制一个数据库到一个新的PostgreSQL实例。 由于旧服务器的问题,我不能做一个数据库的pg_dump。

我已经想出了哪个目录是针对数据库的。 例如,在MySQL中,您通常会closures服务器,将目录复制并重新启动,数据库将可用。 现在这不适用于PostgreSQL,我怀疑这是因为数据库没有列在global / pg_database文件中。 这个文件似乎是在PostgreSQL启动时自动生成的,那么如何告诉系统数据库在那里呢?

请注意,在PostgreSQL中,您的群集数据目录是一个独立的单元,无法可靠地在部分中进行恢复,如此处的文档所述。

你最好的希望是使用旧服务器的完整数据目录,并在其上启动一个服务器,然后从你从那里得到的数据库转储中恢复:

  1. 获取适合新主机上的configuration的postgresql.conf(定位自己的旧文件(在此更改)以及新的数据目录)
  2. 找出旧安装的PostgreSQL超级用户的用户名 – 很可能是postgres。
  3. 在新主机上创build此用户名(UNIX用户),除非它已经在那里。
  4. 将旧数据目录提供(chown)给该用户,除非该uid与旧服务器上的相匹配。
  5. 在旧数据目录中configurationpg_hba.conf以允许来自本地用户的连接到相同的postgres用户名(这通常是默认的,但是检查)。
  6. 以与旧数据目录的超级用户相同的UNIX用户身份运行旧的数据库集群,例如用于用户postgres:
     sudo -u postgres postgres -D old_data_directory
    
    

    或者用su:

    su postgres postgres -D old_data_directory
  7. 转储旧的数据库,再次使用通常的用户名postgres:
     sudo -u postgres pg_dump -p / path / to / socket / for / old /目录database_name> dump_file.sql
    
    

    su与上面类似

  8. 使dump_file.sql适应新服务器的用户名等。 在那里创build适当的所有权的空数据库
  9. 将数据库扫描到新服务器中:
     sudo -u postgres psql -p / path / to / socket / for / new /目录new_database_name
    
    

    再一次,使用苏类似于以上获得postgres特权

这应该让你设置,或者至less显示一个好path到达那里。