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

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

основываясь на этом, у меня есть несколько вопросов:

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

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

2 ответов


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

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

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

    CREATE EXTENSION hstore SCHEMA extensions;

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

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


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

create extension hstore schema pg_catalog;