Подтвердить что ты не робот

Как установить расширения Postgres при создании базы данных?

Было бы замечательно, если после команды rake db:create могла последовать установка postgresql script. Это, например. (Он должен быть запущен как пользователь postgres):

CREATE EXTENSION "fuzzystrmatch";

Это потому, что в этот момент я делаю это вручную каждый раз, когда я создаю базу данных.

Любые подсказки?

4b9b3361

Ответ 1

По Rails 4 существует метод enable_extension:

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

Ответ 2

Я просто делаю это при миграции

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, в зависимости от расширения, которое должно быть суперпользователем или владельцем базы данных. Таким образом, в моих dev-блоках я даю пользователю Super User Rights для удобства использования.