Ответ 1
По Rails 4 существует метод enable_extension
:
class AddFuzzyStringMatching < ActiveRecord::Migration
def change
enable_extension "fuzzystrmatch"
end
end
Было бы замечательно, если после команды rake db:create
могла последовать установка postgresql script. Это, например. (Он должен быть запущен как пользователь postgres):
CREATE EXTENSION "fuzzystrmatch";
Это потому, что в этот момент я делаю это вручную каждый раз, когда я создаю базу данных.
Любые подсказки?
По Rails 4 существует метод enable_extension
:
class AddFuzzyStringMatching < ActiveRecord::Migration
def change
enable_extension "fuzzystrmatch"
end
end
Я просто делаю это при миграции
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 для удобства использования.
Вы можете создать задачу рейка (это довольно просто) или запутаться с базой данных template1 (не рекомендуется, но возможно):
http://www.postgresql.org/docs/9.2/static/manage-ag-templatedbs.html