2013-05-17 13 views
19

rakeコマンドdb:createの後ろにpostgresqlインストールスクリプトを置くことができれば素敵でしょう。例えばこれです。 (postgresユーザとして実行する必要があります):このため、この瞬間に、私は毎回手動でそれをやっているデータベースの作成時にPostgres拡張機能をインストールするには?

CREATE EXTENSION "fuzzystrmatch"; 

私はデータベースを作成します。

ヒントあなたがrakeタスク(それはかなり簡単です)、またはtemplate1データベース(推奨しますが、可能ではない)と周りの混乱作成することができ

答えて

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を実行するには、任意の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ユーザである必要はありませんのためにそれを行います。だから私のdevボックスに私はユーザに使いやすさのためのスーパーユーザ権限を与えます。

関連する問題