我有一个Postgresql 8.3数据目录备份.我需要将此备份中的数据库复制到新的Postgresql实例中.由于旧服务器的问题,我不能做数据库的pg_dump.
我已经找出了有问题的数据库的目录.例如,在MySQL中,您通常会关闭服务器,复制目录并重新启动它,数据库将可用.现在这不适用于Postgresql,我怀疑是因为数据库没有在global / pg_database文件中列出.当Postgresql启动时,此文件似乎是自动生成的,那么如何告诉系统数据库在那里?
请注意,在Postgresql中,您的群集数据目录是一个独立的单元,根据文档
here,无法可靠地部分恢复.
您最好的希望是使用旧服务器的完整数据目录并在其上启动服务器,然后从您从那里获得的数据库转储进行恢复:
>获取一个适合新主机上配置的postgresql.conf(通过旧文件 – 您在此处更改的文件 – 以及新数据目录来定位自己)
>找出旧安装的Postgresql超级用户的用户名 – 很可能是postgres.
>在新主机上创建此用户名(UNIX用户),除非它已经存在.
>将旧数据目录提供(chown)给该用户,除非uid与旧服务器上的uid匹配.
>在旧数据目录中配置pg_hba.conf以允许从本地用户到相同postgres用户名的连接(这通常是默认设置,但检查).
>将旧数据库集群作为UNIX用户运行,其名称与旧数据目录的超级用户相同,例如对于用户postgres:
sudo -u postgres postgres -D old_data_directoryor with su:
su postgres postgres -D old_data_directory
sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sqlbecoming postgres with su analogous to above
>将dump_file.sql改编为新服务器的用户名等;在那里创建具有适当所有权的空数据库
>将数据库扫描到新服务器:
sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_nameonce again,getting postgres privileges using su analogous to above
这应该让你设定,或至少显示到达那里的良好途径.