pg_dump执行成功但备份文件无INSERT语句及数据问题求助
问题原因及解决办法
核心原因
你备份的wd555.ft_bjgzflcbmxb是分区主表,从备份文件里的PARTITION BY LIST (yyyymm)可以明确这一点。PostgreSQL的分区主表仅作为逻辑框架存在,本身不存储任何实际数据,所有数据都分散在对应的子分区表中。直接用--table指定主表备份,只会导出表结构,不会包含子分区里的数据。
验证步骤
先确认主表本身无数据,执行以下SQL:
SELECT * FROM wd555.ft_bjgzflcbmxb LIMIT 10;
如果能查到数据,是因为PostgreSQL支持直接查询主表聚合所有子分区数据,但这并不代表主表本身存储了数据。
解决方法
方法1:使用--include-partition参数(PostgreSQL 12+)
该参数会让pg_dump自动包含目标分区主表的所有子分区及其数据,修改后的命令:
pg_dump -d xx_sjcbhs --table=wd555.ft_bjgzflcbmxb --include-partition --column-inserts > e:\temp\ontable2.sql
方法2:直接指定子分区表备份
先查询所有子分区名称:
SELECT inhrelid::regclass FROM pg_inherits WHERE inhparent = 'wd555.ft_bjgzflcbmxb'::regclass;
得到子分区名称后,逐个用--table参数指定,示例:
pg_dump -d xx_sjcbhs --table=wd555.ft_bjgzflcbmxb_202401 --table=wd555.ft_bjgzflcbmxb_202402 --column-inserts > e:\temp\ontable2.sql
方法3:备份整个Schema
如果需要备份该Schema下的所有对象(包括分区表和子分区),直接指定Schema名称:
pg_dump -d xx_sjcbhs -n wd555 --column-inserts > e:\temp\schema_backup.sql
内容的提问来源于stack exchange,提问作者Hengaini
相关产品推荐
相关产品推荐

