在使用postgres架构(即schema_name.users)的应用程序上运行rake db:schema:dump时,看起来它只是在db用户的搜索路径中转储第一个架构的表。有没有办法从多个模式中包含表?
以不同方式陈述问题:
createdb myapp
psql myapp -U postgres -c "create table stuff"
#=> creates table "stuff" in the public schema
psql myapp -U postgres -c "create schema specific_thing"
psql myapp -U postgres -c 'create table "specific_thing".users(id int)'
createuser -U postgres -S -D -R special_user
psql myapp -U postgres -c "grant all on schema specific_thing to special_user"
psql myapp -U postgres -c "ALTER USER special_user SET search_path TO specific_thing,public"
在database.yml:
...
development:
adapter: postgresql
database: stuff
username: special_user
password:
host: localhost
...
正在运行:rake db:schema:dump
仅从users
架构转储specific_thing
talbe并忽略公共架构中的所有内容。
答案 0 :(得分:1)
所以这就是我找到的。我没有在我面前的代码所以我不能指出任何具体的东西,但PostgresAdapter中有一些代码可以识别适配器认为可用的“表”。适配器假设它总是处理'公共'模式(公共实际上是在获取表列表的查询中硬编码),因此我对问题的解决方案包括将PostgresAdapter子类化为具有不同概念的“表”是。这让我大部分都在那里。还有一些其他的障碍需要克服,但是在将这件作品融入拼图后,一切都更加清晰。肯定会花一些时间在Rails源代码中。