Миграция не распознает расширение hstore, созданное на schema_search_path

Я пытаюсь добавить столбец с помощью postgresql HStore.

Поскольку я запускаю многопользовательское приложение (используя квартирный гем), я создал расширение 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

Я не уверен, но похоже, что миграции не распознают schema_search_path в файле database.yml.


person Leandro França    schedule 30.08.2015    source источник


Ответы (2)


Вам нужно включить расширение hstore в postgres.

Попробуйте запустить 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

Обратите внимание, что вам нужно будет запустить его перед переносом, который его использует.

person Chris    schedule 30.08.2015
comment
Привет, Крис! Это работает в примере приложения, которое я создал. Однако я использую несколько схем postgresql для запуска многопользовательского приложения. Как только я пытаюсь использовать hstore на другой схеме, я сталкиваюсь с той же ошибкой. Вот почему я пришел с возможностью создать конкретную схему только для расширения hstore, а затем попытаться поместить ее в search_path для всех остальных схем. - person Leandro França; 30.08.2015
comment
Решение, которое я пытаюсь реализовать, написано здесь: github. com/influitive/ - person Leandro França; 30.08.2015

В итоге я добавил расширение в pg_catalog, которое всегда неявно находится в search_path, как описано Крейгом Рингером в этом посте:

Создать HSTORE с несколькими схемами

CREATE EXTENSION hstore WITH SCHEMA pg_catalog;
person Leandro França    schedule 30.08.2015