Включить более одной схемы postgres в rake db: schema: dump? - PullRequest
2 голосов
/ 29 июля 2011

При запуске rake db: schema: dump в приложении, использующем схему postgres (то есть имя_схемы.users), похоже, что это только дамп таблиц для первой схемы в пути поиска пользователя 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

Только выдает talbe users из схемы specific_thing и игнорирует все в общедоступной схеме.

1 Ответ

1 голос
/ 10 октября 2011

Так вот что я нашел. У меня нет кода передо мной, поэтому я не могу указать на что-то определенное, но в PostgresAdapter есть некоторый код, который определяет, что адаптер считает доступными «таблицами». Адаптер предполагает, что он всегда будет иметь дело с «публичной» схемой (public на самом деле жестко закодирован в запросе, который получает список таблиц), поэтому мое решение проблемы заключалось в том, чтобы создать подкласс PostgresAdapter, чтобы иметь другое представление о том, что это «таблицы». являются. Это дало мне большую часть пути туда. Были и другие препятствия, которые нужно было преодолеть, но все было гораздо яснее после того, как эта часть была помещена в головоломку. Хотя определенно стоит потратить некоторое время на источник в Rails.

...