Использование схемы Postgres с Ruby on Rails

У меня есть отдельный сервер, содержащий Ruby on Rails API (DB - postgres), который будет использоваться несколькими приложениями другой. Я думал об использовании схем для сортировки таблиц, которые потребуются каждому приложению, и иметь «общую» схему, содержащую таблицы, которые будут совместно использоваться приложениями (пользователи, сотрудники и т. д.). Каждая схема приложения будет иметь примерно 10 таблиц, а общая схема будет содержать около 15. Текущий план состоит в том, чтобы около 3-5 приложений, использующих этот API, все использовали одни и те же общие таблицы.

У меня вопрос: стоит ли реализовывать схемы Postgres с Ruby on Rails? Я искал ресурсы по этой теме, но, похоже, по ней не так много информации. Есть пара статей, написанных в 2011/2012, но ничего ближе к 2018 году. Одна из главных вещей, которые я искал, - это как правильно создавать рельсовые миграции с помощью схем postgres.

Я также прочитал комментарий пользователя, в котором говорится, что они использовали postgres и rails отдельно, но никогда не будут использовать их вместе.

Кажется хорошей идеей использовать схемы для организации БД, но не хочу идти по этому пути, если для этого потребуется много ручной работы / обслуживания БД.

Спасибо,

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 149
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это можно легко реализовать с помощью Rails, однако вам придется переопределить имя таблицы по умолчанию, ожидаемое Rails, чтобы оно указывало на конкретную схему:

class YourSchemaRecord < ApplicationRecord
  self.table_name_prefix = 'name_of_your_schema.'
end

class SomeRecord < ApplicationRecord
end

class YourCommonSchemaRecord < ApplicationRecord
  self.table_name_prefix = 'public.'
end

class SomeCommonRecord < YourCommonSchemaRecord
end

Что касается миграции Rails, вы можете использовать простой SQL (мой любимый вариант) или использовать встроенный метод Rails, но с указанием «полного пути» таблицы, структуру которой вы хотите обновить:

add_column 'name_of_your_schema.some_records', :some_column, :string

Спасибо за ответ @MrYoshiji, оцените примеры! Вы рекомендуете идти по маршруту схемы?

SegFaultDev 14.09.2018 21:19

Да точно! Это помогает организовать ваши таблицы более чистым способом, чем просто префиксы в именах таблиц, + я почти уверен, что это также помогает для оптимизации в долгосрочной перспективе (сам еще не дошел до этой части)

MrYoshiji 14.09.2018 21:53

Предлагаю пройти гем квартира. Он имеет отличную поддержку для нескольких схем с одним БД, если вы используете postgres. Или, если вы хотите реализовать все самостоятельно, пройдите этот эпизод железнодорожные трансляции. Вы поймете, как к этому подойти.

Другие вопросы по теме