Establecer permanentemente la ruta del esquema Postgresql


136

Necesito establecer la ruta del esquema en Postgres para no especificar siempre la tabla de puntos del esquema, por ejemplo schema2.table. Establecer ruta de esquema:

SET SCHEMA PATH a,b,c

solo parece funcionar para una sesión de consulta en mac, después de cerrar la ventana de consulta, la variable de ruta se restablece por defecto.

¿Cómo puedo hacer que sea permanente?


Creo que es SET search_path TO a, b, c; como dice la respuesta y no SET SCHEMA PATH a, b, c;
Armando

Respuestas:


168

(Y si no tiene acceso de administrador al servidor)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Dos cosas importantes que debes saber:

  1. Cuando un nombre de esquema no es simple, debe estar entre comillas dobles.
  2. El orden en que establece los esquemas predeterminados es a, b, cimportante, ya que también es el orden en que se buscarán los esquemas para las tablas. Entonces, si tiene el mismo nombre de tabla en más de un esquema entre los valores predeterminados, no habrá ambigüedad, el servidor siempre usará la tabla del primer esquema que especificó para su search_path.

19
También vale la pena señalar que NO debe usar explícitamente comillas alrededor de la enumeración a, b, c. De la mano a la frente durante los últimos 15 minutos ...
Jmoney38

44
@ Jmoney38 No utilizar comillas simples, pero se requieren comillas dobles para nombres de esquema no simples.
vitaly-t

136

Puede establecer el valor predeterminado search_pathen el nivel de la base de datos:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

O a nivel de usuario o rol:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

O si tiene un esquema predeterminado común en todas sus bases de datos, puede establecer el valor predeterminado de todo el sistema en el archivo de configuración con la opción search_path .

Cuando se crea una base de datos, se crea de manera predeterminada a partir de una base de datos de "plantilla" oculta llamada template1 , puede modificar esa base de datos para especificar una nueva ruta de búsqueda predeterminada para todas las bases de datos creadas en el futuro. También puede crear otra base de datos de plantilla y usarla CREATE DATABASE <database_name> TEMPLATE <template_name>para crear sus bases de datos.


9
para aquellos que se preguntan desde la línea de comando psql, pueden enumerar esquemas por \ dn
BKSpurgeon

3
Necesita desconectar la sesión y volver a conectarse para que la configuración surta efecto.
isapir

oh bendito seas vino a PG desde SQL Server, así que todo esto es nuevo (y extraño) para mí
Nate Anderson

24

Josh tiene razón, pero omitió una variación:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Establezca la ruta de búsqueda para el usuario, en una base de datos particular.


Muy útil también. Gracias
Alejandro Teixeira Muñoz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.