如果rake命令db:create
後面跟着postgresql安裝腳本,那將是可愛的。這例如。如何在數據庫創建時安裝Postgres擴展?
CREATE EXTENSION "fuzzystrmatch";
這是因爲,在這一刻,我做手工每次我創建一個數據庫:(必須爲Postgres的用戶運行)。
任何提示?
如果rake命令db:create
後面跟着postgresql安裝腳本,那將是可愛的。這例如。如何在數據庫創建時安裝Postgres擴展?
CREATE EXTENSION "fuzzystrmatch";
這是因爲,在這一刻,我做手工每次我創建一個數據庫:(必須爲Postgres的用戶運行)。
任何提示?
由於導軌4,有一個方法enable_extension
:
class AddFuzzyStringMatching < ActiveRecord::Migration
def change
enable_extension "fuzzystrmatch"
end
end
您可以創建一個rake任務(這是相當簡單),或更動template1數據庫(不推薦,但是可能):
http://www.postgresql.org/docs/9.2/static/manage-ag-templatedbs.html
我只是這樣做在遷移
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用戶,根據擴展它需要是超級用戶或數據庫所有者。所以在我的開發箱中,我給了用戶超級用戶權限以便於使用。