使用pg_dump备份后,无法重建hstore数组列的索引
解决PostgreSQL导入备份时hstore类型不存在的报错
嘿,这个问题我熟!你遇到的报错是因为目标PostgreSQL实例里还没启用hstore扩展,而你的备份文件里用到了这个类型的索引,所以导入时数据库认不出它。下面给你两种简单的解决办法:
方法一:导入前手动启用hstore扩展
- 先登录到目标数据库的命令行:
psql -U <user> <db> - 在数据库交互界面里执行创建扩展的命令:
CREATE EXTENSION IF NOT EXISTS hstore; - 退出交互界面(输入
\q回车),再重新执行你的导入命令:psql -f dump.sql -U <user> <db>
方法二:修改备份文件自动加载扩展
如果不想手动提前操作,也可以直接修改你的dump.sql文件:
- 打开
dump.sql,在文件最开头(所有CREATE TABLE、CREATE INDEX这类语句之前)添加一行:CREATE EXTENSION IF NOT EXISTS hstore; - 保存文件后,再执行导入命令就没问题了
原理很简单:源数据库里因为用到了hstore类型,所以默认已经启用了这个扩展,但目标数据库是全新的(或者之前没装过),PostgreSQL不会自动帮你加载非默认扩展,所以得手动告诉它先装上hstore,后续的索引创建语句就能识别这个类型啦。
内容的提问来源于stack exchange,提问作者svoop
相关产品推荐
相关产品推荐

