2013-05-17 96 views

回答

47

由於導軌4,有一個方法enable_extension

class AddFuzzyStringMatching < ActiveRecord::Migration 
    def change 
    enable_extension "fuzzystrmatch" 
    end 
end 
5

我只是這樣做在遷移

class AddCryptoToDb < ActiveRecord::Migration 
    def up 
    execute <<-SQL 
     CREATE extension IF NOT EXISTS pgcrypto; 
    SQL 
    end 
end 

你可以在那裏執行任何sql。我也這樣做的功能

class BuildFnSetWebUsersUid < ActiveRecord::Migration 
    def up 
    say "building fn_set_web_users_uid function" 
    execute <<-SQL 
     CREATE OR REPLACE FUNCTION fn_set_web_users_uid() 
     RETURNS trigger AS 
     $BODY$ 
     BEGIN 
      IF NEW.uid IS NULL THEN 
      SELECT UID into NEW.uid 
      FROM generate_series(10000, (SELECT last_value FROM web_users_uid_seq)) AS s(uid) 
      EXCEPT 
      SELECT uid FROM web_users 
      ORDER BY uid; 
      IF NEW.uid is NULL THEN 
       SELECT nextval('web_users_uid_seq') INTO NEW.uid; 
      END IF; 
      END IF; 
      RETURN NEW; 
     END; 
     $BODY$ 
     LANGUAGE 'plpgsql'; 
    SQL 
    end 

    def down 
    execute "DROP FUNCTION IF EXISTS fn_set_web_users_uid;" 
    end 
end 

而且它不需要postgres用戶,根據擴展它需要是超級用戶或數據庫所有者。所以在我的開發箱中,我給了用戶超級用戶權限以便於使用。

相關問題