Присвоение псевдонима базе данных в Postgres

Вопрос или проблема

Есть ли способ дать базе данных 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:

  1. Схемы в рамках одной базы данных: Создание отдельных схем в рамках одной базы данных позволяет изолировать наборы данных по аналогии с базами данных в MySQL. Например, можно создать схему alpha и схему one в одной базе данных.

    CREATE SCHEMA alpha;
    CREATE SCHEMA one;

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

  2. PgBouncer: Это легковесный пул соединений для PostgreSQL, который может действовать в режиме перенаправления запросов. Несмотря на то, что это не создаёт псевдонима на уровне базы данных, PgBouncer позволяет управлять конфигурацией подключений гибким образом, например, перенаправляя запросы к нужной базе данных.

  3. Символические ссылки на уровне файловой системы: Хотя этот метод и не рекомендуется для готовых проектов из-за риска повреждений данных, в теории возможно создание символических ссылок на уровне файловой системы для имитации псевдонима базы данных. Этот подход может рассматриваться только для приложений только на чтение и требует тщательной настройки и тестирования.

  4. Конфигурация подключения: Можно использовать различные варианты строк подключения, которые суммарно будут указывать на одну и ту же базу данных, играя с параметрами, но это не изменит саму суть названия базы данных.

В общем, концепция псевдонимов базы данных не поддерживается PostgreSQL по тем же причинам, что и строгая структура БД — безопасность и целостность данных. Однако с использованием схем и инструментов типа PgBouncer можно достичь иерархической изоляции данных и управления подключениями, что даёт большую гибкость при работе с крупными системами.

Оцените материал
Добавить комментарий

Капча загружается...