我正在尝试使用postgresql HStore添加一个列。
由于我运行多租户应用程序(使用公寓gem),我在专用架构上创建了hstore扩展,名为“shared_extensions”,如下所示:[https://github.com/influitive/apartment#installing-extensions-into-persistent-schemas][1]
我还将shared_extensions架构添加到database.yml中:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
schema_search_path: "public,shared_extensions"
但是,当我尝试运行rake db:migrate以添加hstore列时,我仍然收到错误:
ActiveRecord::StatementInvalid: PG::UndefinedObject: ERROR: type "hstore" does not exist
这是hstore迁移代码:
class AddAdditionalInformationsToParties < ActiveRecord::Migration
def change
add_column :parties, :additional_informations, :hstore
end
end
我不确定,但看起来迁移无法识别database.yml文件中的schema_search_path。
答案 0 :(得分:2)
您需要在postgres中启用hstore扩展名。
尝试运行rails g migration add_hstore_extension
,然后按如下所示进行编辑:
class AddHstoreExtension < ActiveRecord::Migration
def self.up
enable_extension "hstore"
end
def self.down
disable_extension "hstore"
end
end
请注意,在使用它的迁移之前,您需要运行。
答案 1 :(得分:0)
我最后添加了pg_catalog的扩展名,它总是隐含在search_path上,正如Craig Ringer在这篇文章中描述的那样:
Create HSTORE with multiple schemas
CREATE EXTENSION hstore WITH SCHEMA pg_catalog;