微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个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_directory

or with su:

su postgres postgres -D old_data_directory

>再次使用通常的用户名转储旧数据库postgres:

sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql

becoming postgres with su analogous to above

>将dump_file.sql改编为新服务器的用户名等;在那里创建具有适当所有权的空数据库
>将数据库扫描到新服务器:

sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name

once again,getting postgres privileges using su analogous to above

这应该让你设定,或至少显示到达那里的良好途径.

原文地址:https://www.jb51.cc/postgresql/192299.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐