Étant donné que les objets dans le pg_catalog
schéma sont implicitement dans les search_path
( docs ), serait-il recommandé d'installer des extensions dans ce schéma?
Étant donné que les objets dans le pg_catalog
schéma sont implicitement dans les search_path
( docs ), serait-il recommandé d'installer des extensions dans ce schéma?
Ne pas installer les extensions à pg_catalog
( à moins que c'est leur défaut: très peu extensions sont conçues de cette façon), parce que vous ne salissez pas avec le catalogue système, jamais . @Chris démontre une des raisons pour lesquelles. Il y en a d'autres.
Cependant, le schéma "public" n'est en rien spécial . C'est juste le schéma par défaut qui est pré-installé dans les distributions standard afin que nous puissions commencer immédiatement. Certains administrateurs DB n'utilisent pas du tout le schéma "public", certains le suppriment même.
CREATE EXTENSION
n'est pas affilié au schéma "public". Il s'installe dans le schéma actuel sauf indication contraire - sauf que certaines extensions ont un schéma prédéfini (comme PGQ / Londiste ). La documentation:
nom_schéma
Nom du schéma dans lequel installer les objets de l'extension, étant donné que l'extension permet de déplacer son contenu. Le schéma nommé doit déjà exister. S'il n'est pas spécifié et que le fichier de contrôle de l'extension ne spécifie pas non plus de schéma, le schéma de création d'objet par défaut actuel est utilisé .
N'oubliez pas que l'extension elle-même n'est pas considérée comme faisant partie d'un schéma: les extensions ont des noms non qualifiés qui doivent être uniques à l'échelle de la base de données. Mais les objets appartenant à l'extension peuvent se trouver dans des schémas.
Accentuation sur moi.
Décidez comment gérer les utilisateurs, les schémas et search_path
:
Décidez ensuite où installer les extensions. Vous pouvez installer sur n'importe quel schéma de votre choix et inclure ce schéma par défaut search_path
pour tous les utilisateurs ou seulement pour certains ou aucun utilisateur (de sorte que des références qualifiées soient requises). Tout dépend de ce que vous voulez réaliser.
Quoi que vous fassiez, restez cohérent.
J'aime installer des extensions (qui le permettent) dans un schéma "d'extensions" dédié, que j'inclus par défaut search_path
après "public" (et "$ user" - si vous l'utilisez). Aide à une séparation nette de mes propres fonctions publiques et d'autres objets publics. Ma mise en postgresql.conf
:
search_path = "$user",public,extensions
Ou:
search_path = public,extensions
Et j'installe des extensions avec:
CREATE EXTENSION some_extension SCHEMA extensions;
Une chose à noter: De cette façon, vous pouvez "masquer" des objets (non qualifiés) dans le extensions
schéma derrière des objets du même nom (et paramètres) dans le public
schéma.
En relation:
plpgsql
extension est-elle alors en quelque sorte une exception à cette règle? Chaque installation que j'ai vue a cette extension dans pg_catalogIn PostgreSQL 9.0 and later, PL/pgSQL is installed by default. However it is still a loadable module, so especially security-conscious administrators could choose to remove it.
pg_catalog
. (Il génère une erreur si vous essayez de le modifier.) Est-ce peut-être une norme pour l'installation d'extensions de langage procédural pour les fonctions?À
pg_catalog
ma connaissance, l' installation d'extensions n'est pas recommandée. Vous devez utiliser lepublic
schéma par défaut , qui se trouve également dans lesearch_path
par défaut.Pourquoi?
À titre d'exemple, je travaillerai avec l'
pageinspect
extension que j'ai déjà créée dans lepublic
schéma. Toutes les fonctions sont, par défaut, accessibles à tous les schémas de la base de données si elles se trouvent dans lepublic
schéma.Maintenant, j'essaye de le déplacer vers le
pg_catalog
schéma, en utilisantet ça marche très bien.
Mais...
Essayez de le déplacer à nouveau, revenez au
public
schéma en utilisantet il ne le permettra pas, produisant l'erreur suivante
Euh oh! Eh bien, ça va que ça ne me laisse pas bouger. Je peux simplement le remettre dans le
public
schéma en le supprimant et en le recréant, non? ...OK bien. De retour au bon endroit dans le
public
schéma, les fonctions sont toujours accessibles à tous les schémas de la base de données.TL, DR; Utilisez simplement le
public
schéma par défaut pour les extensions.la source