我有一个由 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 …
Run Code Online (Sandbox Code Playgroud) DB用于存储市场报价,因此一天丢失数据是可以接受的。
所有写入操作均通过单个连接在一天的固定时间连续执行。
每天增加的数据量约为2GB。
由于预算削减,物理存储设备不得不从SSD改为传统硬盘,写入时间从10分钟改为2小时以上。
我应该如何调整 PG 配置以进行写入,尤其是使用传统硬盘?
环境:Ubuntu服务器20.04,Postgresql-11,CPU 4核,RAM 8G,写入时不需要做任何其他事情。