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?

Nakh
fuente
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.
Milen A. Radev
fuente
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.

joshperry
fuente
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.

Chris Johnson
fuente
Muy útil también. Gracias
Alejandro Teixeira Muñoz