从文件夹中恢复postgres db

时间:2017-10-12 22:02:40

标签: postgresql ubuntu

我的服务器上有一个postgresql db文件夹(/var/lib/postgresql/9.5/main/)的旧副本。现在我想从文件中获取数据。所以我将主文件夹复制到我的本地机器并更改了postgresql配置(/etc/postgresql/9.5/main/postgresql.conf)以指向该目录。我还将主目录的权限更改为用户postgres。重新启动postgresql服务(sudo service postgresql restart)后,它确实无法正常工作。

我做错了什么? (是的,我知道,pg_dump是首选的方式,但是这样......) 所以我的问题,这甚至有用吗? 或者还有其他方法可以从中获取数据吗?

一切都在ubuntu 16.04上完成。

修改

将postgresql.conf文件更改为指向新目录后的日志文件。

2017-10-13 06:15:43 CEST [968-1] LOG:  database system was shut down at 2017-10-13 00:21:04 CEST
2017-10-13 06:15:43 CEST [968-2] LOG:  MultiXact member wraparound protections are now enabled
2017-10-13 06:15:43 CEST [959-1] LOG:  database system is ready to accept connections
2017-10-13 06:15:43 CEST [975-1] LOG:  autovacuum launcher started
2017-10-13 06:15:43 CEST [983-1] [unknown]@[unknown] LOG:  incomplete startup packet
2017-10-13 06:47:55 CEST [975-2] LOG:  autovacuum launcher shutting down
2017-10-13 06:47:55 CEST [959-2] LOG:  received smart shutdown request
2017-10-13 06:47:55 CEST [972-1] LOG:  shutting down
2017-10-13 06:47:55 CEST [972-2] LOG:  database system is shut down
2017-10-13 06:47:55 CEST [4667-1] FATAL:  database files are incompatible with server
2017-10-13 06:47:55 CEST [4667-2] DETAIL:  The database cluster was initialized without USE_FLOAT8_BYVAL but the server was compiled with USE_FLOAT8_BYVAL.
2017-10-13 06:47:55 CEST [4667-3] HINT:  It looks like you need to recompile or initdb.

好的,我指的是this。服务器是armv7l,而本地机器是x86_64(uname -m)。那么没有机会从中获取数据吗?

thx,Luc

1 个答案:

答案 0 :(得分:1)

如果您的数据目录来自ARM7l系统并且您的本地系统是x86_64,那么您确实会遇到一些困难。

关于USE_FLOAT8_BYVAL的即时错误是因为ARM7L是32位,并且不能通过64位浮点值(8字节)按值传递。你的64位主机可以。但是,如果您重新编译了USE_FLOAT8_BYVAL禁用的自定义postgres,则可能会遇到其他问题。

我建议在匹配的ARM系统上安装PostgreSQL以恢复数据。 PostgreSQL的数据目录不能跨架构移植(出于性能原因)。

如果您无法再访问ARM系统,那么像qemu这样的模拟器应该可以为您提供帮助。

否则,也许你可以编译一个修改过的PostgreSQL(可能从32位x86开始),它可以读取data-dir,并有适当的配置选项等。我从来不需要尝试这个。