迁移不会识别在schema_search_path上创建的hstore扩展

时间:2015-08-30 01:53:39

标签: ruby-on-rails postgresql rails-migrations hstore apartment-gem

我正在尝试使用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。

2 个答案:

答案 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;