2

我正嘗試添加使用PostgreSQL HStore列。遷移不會認識上schema_search_path創建hstore擴展

由於I'm運行的多租戶應用程序(使用公寓的寶石),從來就創建了一個專門的架構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" 

但是,當我試圖運行耙分貝:遷移到添加hstore列,I'm仍然收到錯誤:

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

您需要啓用的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

請注意,你需要的是對之前運行它使用它進行遷移。

+0

嘿克里斯, 這部作品的樣本我創建的應用程序。 但是,我正在使用多個postgresql模式來運行多租戶應用程序。 一旦我嘗試在另一個模式上使用hstore,我會遇到同樣的錯誤。 這就是爲什麼我創造只是爲了hstore擴展名的特定的模式,然後嘗試把它放在SEARCH_PATH所有其他模式的選項來了。 –

+0

該解決方案我正嘗試實施是一個寫在這裏: https://github.com/influitive/apartment#installing-extensions-into-persistent-schemas –

0

我最終將擴展到pg_catalog,這始終是隱含在SEARCH_PATH,因爲在這個崗位由克雷格·林格描述:

Create HSTORE with multiple schemas

CREATE EXTENSION hstore WITH SCHEMA pg_catalog;