Вопрос или проблема
Есть ли способ дать базе данных postgres псевдоним?
По сути, мне нужна одна база данных, которая будет работать под двумя именами, чтобы я мог делать запросы, например, к DB_ALPHA и DB_ONE, и они имели бы тот же самый эффект. Я решил эту задачу в MySQL, создав символическую ссылку на базу данных в том же каталоге. Я не смог найти аналогичное решение в postgres.
Спасибо за помощь!
Вы не можете создать псевдоним для схемы или базы данных, так как имя схемы / имя базы данных используется внутренне в качестве первичного ключа для таблиц pg_namespace
и pg_database
.
Лучшее решение, похоже, это PgBouncer. Он позволяет объединять и “перенаправлять” подключения от одной базы данных к другой (даже на другом хосте).
Нет, вы не можете. В PostgreSQL вы должны подключиться к одной базе данных, прежде чем можете выполнить любой запрос. В MySQL у вас есть только одна база данных и много схем (называемых “базами данных” в мире MySQL), вы всегда можете выполнить запрос на другой “базе данных”.
Если вы хотите такую же настройку в PostgreSQL, просто создайте разные схемы в вашей базе данных.
CREATE SCHEMA foo;
CREATE SCHEMA bar;
Вам нужно выполнять как запросы на запись, так и на чтение? Меня бы соблазнило попробовать создать вторую базу данных, а затем использовать символическую ссылку на уровне каталога базы данных, чтобы указать на каталог первой базы данных. Это может быть допустимо, если вы придерживаетесь только запросов на чтение во второй системе; с другой стороны, вы можете получить всевозможные повреждения от странных проблем, связанных с общей памятью, но это был бы интересный эксперимент.
Есть способы сделать это, но вы не можете выбирать разные имена.
Например, “DB_ALPHA” (фу! Верхний регистр!) “dbname=DB_ALPHA port=5432” и “port=5432 dbname=DB_ALPHA” могут все указывать на один и тот же экземпляр.
Ответ или решение
Вопрос о создании псевдонимов для базы данных в PostgreSQL затрагивает базовую архитектурную концепцию работы с реляционной СУБД. Основная сложность заключается в том, что в PostgreSQL база данных является более фундаментальной единицей управления, чем в MySQL, где концепции базы данных и схемы часто взаимозаменяемы. Разберём эту тему подробнее, чтобы осветить все аспекты и предложить наиболее подходящие решения.
Теория
В PostgreSQL база данных представляет собой изолированное пространство, в котором находятся схемы, таблицы и другие объекты базы данных. Это означает, что операции выполняются строго в контексте подключенной базы данных и не могут напрямую пересекаться между различными базами данных без дополнительных средств, таких как внешние таблицы (foreign data wrappers) или подключения между базами данных.
С другой стороны, MySQL использует термин "база данных" для обозначения коллекций таблиц, но фактически это скорее соответствует схеме в PostgreSQL. В MySQL можно управлять несколькими "базами данных" (по своей сути, схемами) в пределах одного и того же подключения, что делает возможным использование символических ссылок для достижения желаемой функциональности.
Пример
Если в MySQL вы могли создать символическую ссылку к базе данных, чтобы достичь эффекта псевдонима, то в PostgreSQL это сделать не так просто. Это связано с внутренней структурной организацией данных. Например, таблицы pg_namespace
и pg_database
используют уникальность имён схем и баз данных в качестве части своих первичных ключей, что делает невозможным создание псевдонимов непосредственно на уровне СУБД.
Применение
Существуют альтернативные подходы и инструменты, которые могут помочь достичь желаемого поведения в PostgreSQL:
-
Схемы в рамках одной базы данных: Создание отдельных схем в рамках одной базы данных позволяет изолировать наборы данных по аналогии с базами данных в MySQL. Например, можно создать схему
alpha
и схемуone
в одной базе данных.CREATE SCHEMA alpha; CREATE SCHEMA one;
Это позволит обращаться к таблицам и другим объектам внутри этих схем без необходимости переключаться между базами данных.
-
PgBouncer: Это легковесный пул соединений для PostgreSQL, который может действовать в режиме перенаправления запросов. Несмотря на то, что это не создаёт псевдонима на уровне базы данных, PgBouncer позволяет управлять конфигурацией подключений гибким образом, например, перенаправляя запросы к нужной базе данных.
-
Символические ссылки на уровне файловой системы: Хотя этот метод и не рекомендуется для готовых проектов из-за риска повреждений данных, в теории возможно создание символических ссылок на уровне файловой системы для имитации псевдонима базы данных. Этот подход может рассматриваться только для приложений только на чтение и требует тщательной настройки и тестирования.
-
Конфигурация подключения: Можно использовать различные варианты строк подключения, которые суммарно будут указывать на одну и ту же базу данных, играя с параметрами, но это не изменит саму суть названия базы данных.
В общем, концепция псевдонимов базы данных не поддерживается PostgreSQL по тем же причинам, что и строгая структура БД — безопасность и целостность данных. Однако с использованием схем и инструментов типа PgBouncer можно достичь иерархической изоляции данных и управления подключениями, что даёт большую гибкость при работе с крупными системами.