2

我正在尝试使用 postgresql HStore 添加一列。

因为我正在运行一个多租户应用程序(使用公寓 gem),所以我在一个名为“shared_extensions”的专用模式上创建了 hstore 扩展,如下所示:[ 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。

4

2 回答 2

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

请注意,您需要在使用它的迁移之前运行它。

于 2015-08-30T02:12:30.407 回答
0

我最终将扩展添加到 pg_catalog,它总是隐含在 search_path 上,正如 Craig Ringer 在这篇文章中所描述的:

创建具有多个模式的 HSTORE

CREATE EXTENSION hstore WITH SCHEMA pg_catalog;
于 2015-08-30T03:13:07.417 回答