pg_dump
我有一个由PostgreSQL v12 客户端附带的大转储文件,它是自定义格式而不是纯 sql 文本。服务器的版本也是 PostgreSQL v12。
现在我需要将文件重新加载到 PostgreSQL v11 服务器中,我收到一条错误消息:
unrecognized configuration parameter "default_table_access_method"
我猜这个参数是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 = '';
不,没有这种方法,因为不支持降级 PostgreSQL。
您必须手动编辑转储并删除诸如此类的行,直到转储加载时没有错误。可能还有其他比新参数更复杂的问题,请参阅此问题以获取旧版本中的示例。
如果转储很大,您可以将其拆分为三个部分:
您只需编辑第一个和最后一个文件,它们总是很小。“数据”部分可以自定义格式转储,并将被压缩。编辑后,以相同的顺序加载文件。