Лучший способ установить 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;