我最近不得不使用命令将数据库结构从一个数据库复制到另一个数据库
pg_dump -c -S database_name > pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
然后我在新数据库上运行转储文件
psql < pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
并且重新创建了我的模式,并安装了我的扩展。
检查已安装的扩展后,我可以看到 hstore 已安装,但是当我尝试 hstore 的基本运算符时,例如
SELECT id FROM schema_name.table_name WHERE hstore_column->'hstore_key'::TEXT = 'hstore_value'
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
operator does not exist: schema_name.hstore -> text
Run Code Online (Sandbox Code Playgroud)
如果我不尝试投射密钥,我会收到类似的错误
operator does not exist: schema_name.hstore -> unkown
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是简单地删除 hstore 扩展并重新安装它,但这样做也会删除我对 hstore 类型的众多用户函数、触发器和其他依赖项。
除了对 hstore 扩展进行级联删除之外,有没有办法解决这个错误?我正在使用 postgresql 9.3 服务器。
对于遇到这个问题的任何人。我今天遇到了这个问题并找到了解决方案。
根据您安装扩展的位置,它可能不在您的 search_path 中。就我而言,我将它安装到同一个数据库上的模式“shared_extensions”中。
使用SHOW search_path
显示的$user, public
,这意味着它是头也不回shared_extensions的延伸,它的运营商
要修复它,请运行
SET search_path TO "$user", public,
后跟安装扩展的架构。
希望有帮助!
归档时间: |
|
查看次数: |
5895 次 |
最近记录: |