Лучший способ установить hstore на несколько схем в базе данных Postgres?

Я работаю над проектом, который должен использовать hstore на нескольких схемах. "Общественная" схема, где hstore устанавливаемое расширение доступно не везде, потому что моя область не просматривается как "общедоступная". На некоторых испытаниях я создал расширение для схемы под названием "hstore" и использовал схему в каждой доступной области (пути поиска).

Исходя из этого, у меня есть несколько вопросов:

  • Можно ли создать схему только для расширения? Или лучше создать расширение для каждой отдельной схемы (например, customer_1, customer_2, и так далее...)?

  • Влияет ли создание расширения в отдельной схеме на место хранения данных? Я использую несколько схем, чтобы упростить резервное копирование / восстановление, и действительно не хочу, чтобы pg сохранял все мои hstore данные в скрытой таблице (например, pg_large_objects для блобов) по одной схеме.

2 ответа

Решение

Не разрешается устанавливать расширения несколько раз для каждой базы данных. Цитирование руководства по CREATE EXTENSION:

Помните, что само расширение не считается находящимся в какой-либо схеме: расширения имеют неквалифицированные имена, которые должны быть уникальными для всей базы данных. Но объекты, принадлежащие расширению, могут находиться в схемах.

Если вы не хотите включать public в вашем search_path установите "публичные" расширения в выделенную схему (пример: extensions). Я бы использовал одну схему для всех них, а не отдельную схему для каждого расширения. Их довольно много. CREATE EXTENSION предлагает возможность установки на существующую схему по вашему выбору:

    CREATE EXTENSION hstore SCHEMA extensions;

И убедитесь, что схема включена в search_path пользователей, которые могут захотеть использовать его.

Схема, в которой находится расширение, не влияет на хранение данных.

Попробуйте установить расширение hstore на всех схемах.

create extension hstore schema pg_catalog;
Другие вопросы по тегам