我一直在尝试迁移我的数据库以使用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谢谢.
如果你正在使用多个不同的模式,我建议hstore
自己设置并确保它始终在search_path
.你可能在任何时候都不想要public
你search_path
,并且把事情分开是很好的.
CREATE SCHEMA hstore; CREATE EXTENSION hstore WITH SCHEMA hstore;
...然后search_path
使用hstore.hstore
类型名称修改您的一致性,或者只是总是使用模式限定所有内容OPERATOR(hstore.->)
.例如
SELECT hstore.hstore('"x" => "42"') OPERATOR(hstore.->) "x"
或者,安装hstore
到pg_catalog
以下位置是安全的:
CREATE EXTENSION hstore WITH SCHEMA pg_catalog;
pg_catalog
总是隐含在搜索路径上.
您需要以与架构命名和搜索路径一致的方式引用对象.例如:
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;