Leo*_*eon 4 postgresql pg-dump downgrade pg-restore postgresql-12
我有一个由 PostgreSQL v12 客户端附带生成的大转储文件pg_dump,它是自定义格式而不是纯 sql 文本。服务器的版本也是 PostgreSQL v12。
现在我需要将文件重新加载到 PostgreSQL v11 服务器中,并收到一条错误消息:
unrecognized configuration parameter "default_table_access_method"
Run Code Online (Sandbox Code Playgroud)
我猜测这个参数是PG12引入的,所以PG11无法识别它,即使我使用12版本的pg_restore.
由于该文件很大且采用二进制格式,因此我无法编辑它以手动删除该行。
我pg_restore test_file -f plain.sql使用测试转储文件对此进行了测试,看起来可以正常工作,并且我可以从纯 SQL 文件中删除该行。但真实的转储文件约为 30GB,从二进制文件扩展的纯 SQL 文件可能更大(工作数据库占用 300GB 磁盘空间)。
有没有办法,我可以干净地将其重新加载到 PG11 中,而无需“SET default_table_access_method = heap;”行?
其实下面这些都可以忽略,因为都是默认值:
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
Run Code Online (Sandbox Code Playgroud)
不,没有这样的方法,因为不支持降级 PostgreSQL。
您必须手动编辑转储并删除诸如此类的行,直到转储加载没有错误为止。可能还有其他比新参数更复杂的问题,请参阅此问题以获取旧版本中的示例。
如果转储很大,您可以将其分为三部分:
pg_dump --format=plain --section=pre-data --file=dbname-pre.sql dbname
pg_dump --format=custom --section=data --file=dbname-data.dmp dbname
pg_dump --format=plain --section=post-data --file=dbname-post.sql dbname
Run Code Online (Sandbox Code Playgroud)
您只需编辑第一个和最后一个文件,它们总是很小。“数据”部分可以以自定义格式转储并被压缩。编辑后,按相同顺序加载文件。
| 归档时间: |
|
| 查看次数: |
5755 次 |
| 最近记录: |