使用多个模式创建HSTORE

 陈怡淑611947 发布于 2023-02-08 06:52

我一直在尝试迁移我的数据库以使用HSTORE,但是当我想在其他模式中添加HSTORE列时,扩展仅适用于公共 SCHEMA,它不起作用

def up
  # My hstore looks like this
  execute "CREATE EXTENSION hstore SCHEMA public"
  # I have also tried
  # execute "CREATE EXTENSION hstore"
end

但是当我运行我的下一次迁移它只是不起作用,如果我去psql控制台和alter table我得到这个:

set search_path to public;
alter table accounts add column extras hstore; -- Works fine
set search_path to schema2;
alter table accounts add column extras hstore; -- Raises an error

我正在使用rails 4谢谢.

2 个回答
  • 如果你正在使用多个不同的模式,我建议hstore自己设置并确保它始终在search_path.你可能在任何时候都不想要publicsearch_path,并且把事情分开是很好的.

    CREATE SCHEMA hstore;
    CREATE EXTENSION hstore WITH SCHEMA hstore;
    

    ...然后search_path使用hstore.hstore类型名称修改您的一致性,或者只是总是使用模式限定所有内容OPERATOR(hstore.->).例如

    SELECT hstore.hstore('"x" => "42"') OPERATOR(hstore.->) "x"
    

    或者,安装hstorepg_catalog以下位置是安全的:

    CREATE EXTENSION hstore WITH SCHEMA pg_catalog;
    

    pg_catalog 总是隐含在搜索路径上.

    2023-02-08 07:08 回答
  • 您需要以与架构命名和搜索路径一致的方式引用对象.例如:

    CREATE EXTENSION hstore SCHEMA public;
    
    SET search_path TO schema2;
    ALTER TABLE accounts ADD COLUMN extras public.hstore;
    

    要么

    SET search_path TO public;
    ALTER TABLE schema2.accounts ADD COLUMN extras hstore;
    

    2023-02-08 07:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有