search_path
Valores (predeterminados en negrita)
'$user', public, schema_names
Una lista de nombres de esquemas existentes separada por comas. Si '$user' está presente, se sustituye el esquema que tenga el mismo nombre que SESSION_USER
; de lo contrario, se ignora.
Descripción
Especifica el orden en el que se buscan los esquemas cuando se referencia un objeto (como una tabla o una función) con un nombre simple sin un componente de esquema:
-
Las rutas de búsqueda no se admiten con esquemas externos ni tablas externas. Las tablas externas deben estar clasificadas explícitamente por un esquema externo.
-
Cuando se crean objetos sin un esquema de destino específico, estos se colocan en el primer esquema que aparece en la ruta de búsqueda. Si la ruta de búsqueda está vacía, el sistema devuelve un error.
-
Cuando existen objetos con nombres idénticos en diferentes esquemas, se utiliza el que se encuentre primero en la ruta de búsqueda.
-
Solo se podrá referenciar un objeto que no se encuentre en ninguno de los esquemas de la ruta de búsqueda mediante la especificación del esquema que lo contiene con un nombre (con puntos) calificado.
-
El esquema del catálogo del sistema, pg_catalog, se busca siempre. Si se menciona en la ruta, se busca en el orden especificado. Si no, se busca antes que a cualquiera de los elementos de la ruta.
-
El esquema de tablas temporales de la sesión actual, pg_temp_nnn, se busca siempre, si existe. Puede aparecer explícitamente en la ruta con el alias pg_temp. Si no aparece en la ruta, se busca primero (incluso antes que pg_catalog). No obstante, el esquema temporal solo se busca por nombres de relación (tablas, vistas). No se busca por nombres de funciones.
Ejemplo
En el siguiente ejemplo, se crea el esquema ENTERPRISE y se establece el search_path para el esquema nuevo.
create schema enterprise; set search_path to enterprise; show search_path; search_path ------------- enterprise (1 row)
En el siguiente ejemplo, se agrega el esquema ENTERPRISE al search_path predeterminado.
set search_path to '$user', public, enterprise; show search_path; search_path ----------------------------- "$user", public, enterprise (1 row)
En el siguiente ejemplo, se agrega la tabla FRONTIER al esquema ENTERPRISE.
create table enterprise.frontier (c1 int);
Cuando la tabla PUBLIC.FRONTIER se crea en la misma base de datos, y el usuario no especifica el nombre del esquema en una consulta, PUBLIC.FRONTIER tiene prioridad sobre ENTERPRISE.FRONTIER:
create table public.frontier(c1 int); insert into enterprise.frontier values(1); select * from frontier; frontier ---- (0 rows) select * from enterprise.frontier; c1 ---- 1 (1 row)