今天用pg_dump 备份greenplum 数据库的ddl 的时候,遇到一个其他的错误,记录一下。
执行备份命令:
1 2 | [gpadmin@gpmdw tmp]$ pg_dump -Fp --gp-syntax -s -f . /pgdump_output .sql testdb1 pg_dump: query to obtain distribution policy of table "dim_org" returned no data |
使用-v 参数,查看详细出错信息,重新执行
[gpadmin@gpmdw tmp]$ pg_dump -Fp --gp-syntax -v -s -f ./pgdump_output.sql testdb1 20171121:18:43:37|pg_dump-[INFO]:-reading schemas 20171121:18:43:37|pg_dump-[INFO]:-reading user-defined functions 20171121:18:43:37|pg_dump-[INFO]:-reading user-defined types ..... 20171121:18:43:37|pg_dump-[INFO]:-reading constraints 20171121:18:43:37|pg_dump-[INFO]:-reading triggers pg_dump: reading dependency data pg_dump: saving encoding = UTF8 pg_dump: saving standard_conforming_strings = off pg_dump: saving database definition pg_dump: query to obtain distribution policy of table "dim_org" returned no data pg_dump: *** aborted because of error [gpadmin@gpmdw tmp]$
开始怀疑是dim_org 这张表有问题,经过检查,dim_org 很正常,没有任何问题;
testdb1=# \d public.dim_org Table "public.dim_org" Column | Type | Modifiers --------+------------------------+----------- orgid | integer | name | character varying(100) | Distributed by: (orgid) testdb1=#
后来再检查数据库日志,发现 pg_dump 是执行如下SQL来查询表的表的分布键的:
SELECT attrnums from pg_namespace as n, pg_class as c, gp_distribution_policy as p WHERE c.relname = 'dim_org' AND n.nspname='public' AND c.relnamespace=n.oid AND c.oid = p.localoid;
而我的数据库testdb1 存在一张测试表 public.pg_class, 里面的数据为空,导致上面的SQL执行结果为空。所以报错退出;
把public.pg_class 修改为public.pg_class2 之后,重新执行pg_dump ,可以正常备份了。
以后还是不要再public 下创建和系统表同名的表了,这个问题又搞了一个上午。
分类:
GreenplumDB
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥