29

rake コマンドのdb:create後に postgresql インストール スクリプトを実行できれば素晴らしいと思います。たとえば、これ。(postgres ユーザーとして実行する必要があります):

CREATE EXTENSION "fuzzystrmatch";

これは、現時点では、データベースを作成するたびに手動で行っているためです。

ヒントはありますか?

4

3 に答える 3

6

移行でこれを行うだけです

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 ユーザーである必要はありません。そのため、私の開発ボックスでは、使いやすさのためにユーザーにスーパー ユーザー権限を与えています。

于 2013-05-17T14:44:05.137 に答える
1

rake タスクを作成するか (かなり簡単です)、template1 データベースをいじることができます (推奨されませんが、可能です):

http://www.postgresql.org/docs/9.2/static/manage-ag-templatedbs.html

于 2013-05-17T14:27:46.043 に答える