Отказ от ответственности: я не знаю rails, поэтому я собираюсь дать очень постгресклиновые ответы здесь.Что касается первой части вашего вопроса, вполне возможно, что есть гораздо лучший способ сделать это, заставляя rails указывать схему при создании таблиц.
В PostgreSQL таблицы ищутся в схемах в соответствии с search_path
настройка.По умолчанию установлено значение "$user",public
.Таблицы создаются в первой найденной схеме в пути поиска.Поэтому, если вы подключитесь как «my_user», он попытается создать таблицы в «my_user» и обратится к созданию их в «public», если «my_user» не существует.
Так что один из подходовобновите параметр "search_path", используемый для пользователя, которого вы подключаете к базе данных, чтобы внести изменения в схему.Например, вы можете сказать ALTER USER my_user SET search_path = my_app, public
.Если вы затем создадите схему «my_app», то последующие CREATE TABLE foo(...)
команды, выполняемые «my_user», поместят новую таблицу в «my_app».
Вы можете изменить схему таблицы, используя ALTER TABLE foo SET SCHEMA my_app
.