uly*_*rex 6 postgresql pg-dump ruby-on-rails-5
迁移我的开发数据库后,我无法运行rails db:test:prepare.
我的应用程序使用该db/structure.sql文件来更新测试数据库:
# config/application.rb
config.active_record.schema_format = :sql
Run Code Online (Sandbox Code Playgroud)
当我运行rails db:migrate(也运行db:structure:dump)时,我db/structure.sql的更新。不幸的是,它现在在更新后在顶部附近包含此行:
CREATE SCHEMA public;
Run Code Online (Sandbox Code Playgroud)
这将在加载到已经包含public模式的数据库中时爆炸。
我可以手动更新该行并成功加载 SQL 转储:
CREATE SCHEMA IF NOT EXISTS public;
Run Code Online (Sandbox Code Playgroud)
...但我不想每次都这样做。
我希望在db/structure.sql运行时从 SQL 转储成功构建测试数据库,rails db:test:prepare因为 SQL 转储不应尝试创建public模式。
我的开发环境配置明确指定了“公共”模式。我删除了该规范,从而可以db:test:prepare成功完成。
# config/environments/development.rb
Rails.application.configure do
...
config.active_record.dump_schemas = "public" # <<-- DELETED!
end
Run Code Online (Sandbox Code Playgroud)
db:structure:dump您可以通过设置config.active_record.dump_schemas以下选项之一来配置调用时将转储哪些数据库架构:
:schema_search_pathschema_search_path:这会在 中的设置中查找架构名称config/database.yml。"<some string>":它将转储字符串中的模式名称。这里的名称是逗号分隔的值。:all:未指定模式名称。如果config.active_record.dump_schemas.blank? == true,ActiveRecord 的 Postgres 适配器会将标志设置--schema=<schema name>为 onpg_dump,这又会将该行添加CREATE SCHEMA <schema name>到其输出中db/structure.sql。
一个有趣的副作用是现在db:test:prepare插入这个:
CREATE SCHEMA _template;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |