我的服务器上有一个旧的 postgresql 数据库文件夹 (/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)。所以没有机会从中获取数据?
谢谢,吕克
最佳答案
如果您的数据目录确实来自 ARM7l 系统,而您的本地系统是 x86_64,那么您将遇到一些困难。
关于 USE_FLOAT8_BYVAL
的直接错误是因为 ARM7L 是 32 位的,不能按值传递 64 位浮点值(8 字节)。您的 64 位主机可以。但是,如果您在禁用 USE_FLOAT8_BYVAL
的情况下重新编译自定义 postgres,您可能会遇到其他问题。
我建议在匹配的 ARM 系统上安装 PostgreSQL 来恢复数据。 PostgreSQL 的数据目录不可跨架构移植(出于性能原因)。
如果您无法再访问 ARM 系统,像 qemu 这样的仿真器应该可以帮助您。
否则,也许您可以编译一个修改后的 PostgreSQL(可能从 32 位 x86 开始),它可以读取数据目录,并使用适当的配置选项等。我从来不需要尝试这个。
关于postgresql - 从文件夹恢复 postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719573/