Dado que los objetos en el pg_catalogesquema están implícitamente en search_path( docs ), ¿se recomendaría instalar extensiones en ese esquema?
Dado que los objetos en el pg_catalogesquema están implícitamente en search_path( docs ), ¿se recomendaría instalar extensiones en ese esquema?
No instalar extensiones para pg_catalog(a menos que ese es su defecto: muy pocas extensiones están diseñados de esa manera), ya que no se metan con catálogo del sistema, jamás . @ Chris demuestra una razón por la cual. Hay otros.
Sin embargo, el esquema "público" no es de ninguna manera especial . Es solo el esquema predeterminado que está preinstalado en distribuciones estándar para que podamos comenzar de inmediato. Algunos administradores de bases de datos no utilizan el esquema "público" en absoluto, algunos incluso lo eliminan.
CREATE EXTENSIONno está afiliado al esquema "público". Se instala en el esquema actual a menos que se indique lo contrario, excepto que algunas extensiones tienen un esquema preestablecido (como PGQ / Londiste ). La documentación:
nombre_esquema
El nombre del esquema en el que instalar los objetos de la extensión, dado que la extensión permite que su contenido se reubique. El esquema nombrado ya debe existir. Si no se especifica, y el archivo de control de la extensión tampoco especifica un esquema, se utiliza el esquema de creación de objetos predeterminado actual .
Recuerde que la extensión en sí no se considera dentro de ningún esquema: las extensiones tienen nombres no calificados que deben ser únicos en toda la base de datos. Pero los objetos que pertenecen a la extensión pueden estar dentro de esquemas.
El énfasis audaz es mío.
Decide cómo administrar usuarios, esquemas y search_path:
Luego decida dónde instalar las extensiones. Puede instalar en cualquier esquema de su elección e incluir ese esquema en el valor predeterminado search_pathpara todos los usuarios o solo para algunos o ninguno (para que se requieran referencias calificadas). Todo depende de lo que quieras lograr.
Hagas lo que hagas, mantente constante.
Me gusta instalar extensiones (que lo permiten) en un esquema de "extensiones" dedicado, que incluyo en el valor predeterminado search_path después de "public" (y "$ user", si lo usa). Ayuda con una separación limpia de mis propias funciones públicas y otros objetos públicos. Mi configuración en postgresql.conf:
search_path = "$user",public,extensions
O:
search_path = public,extensions
E instalo extensiones con:
CREATE EXTENSION some_extension SCHEMA extensions;
Una cosa a tener en cuenta: de esta manera puede "ocultar" objetos (no calificados) en el extensionsesquema detrás de objetos del mismo nombre (y parámetros) en el publicesquema.
Relacionado:
plpgsqlextensión, entonces de alguna manera una excepción a esta regla? Cada instalación que he visto tiene esta extensión en 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_catalogmismo. (Se produce un error si intenta cambiarlo). ¿Es esto quizás un estándar para instalar extensiones de lenguaje de procedimiento para funciones?Instalar extensiones en
pg_catalog, por lo que yo sé, no es aconsejable. Debe usar elpublicesquema predeterminado , que también está en elsearch_pathpredeterminado.¿Por qué?
Como ejemplo, trabajaré con la
pageinspectextensión que ya he creado dentro delpublicesquema. Todas las funciones son, de forma predeterminada, accesibles para todos los esquemas de la base de datos si se encuentran en elpublicesquema.Ahora, trato de moverlo al
pg_catalogesquema, usandoY funciona bien.
Pero...
Intente moverlo nuevamente, de vuelta al
publicesquema usandoy no lo permitirá, produciendo el siguiente error
¡UH oh! Bueno, está bien que no me permita moverlo. Puedo regresarlo al
publicesquema soltándolo y volviendo a crearlo, ¿verdad? ...Bien. De vuelta en su lugar correcto en el
publicesquema, y las funciones aún son accesibles para todos los esquemas en la base de datos.TL, DR; Simplemente use el
publicesquema predeterminado para las extensiones.fuente