如何在数据库创建时安装Postgres扩展?

如果rake命令db:create可以后跟postgresql安装脚本,那将是可爱的。 例如,这。 (必须以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。 我也是为了function而做的

 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用户,具体取决于它需要是超级用户或数据库所有者的扩展名。 因此,在我的开发盒上,我为用户提供了超级用户权限,以方便使用。

您可以创建一个rake任务(它相当简单),或者使用template1数据库(不推荐,但可能):

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