¿Cómo seleccionar un esquema en postgres cuando se usa psql?

151

Tengo una base de datos postgres con múltiples esquemas. Cuando me conecto a la base de datos desde un shell con psqly lo ejecuto \dt, utiliza el esquema de conexión predeterminado que es público . ¿Hay una bandera que pueda especificar o cómo puedo cambiar el esquema?

mehany
fuente
1
Considere: stackoverflow.com/questions/9067335/…
Erwin Brandstetter

Respuestas:

197

En PostgreSQL, el sistema determina qué tabla se entiende siguiendo una ruta de búsqueda, que es una lista de esquemas para buscar.

Se considera que la primera tabla coincidente en la ruta de búsqueda es la deseada, de lo contrario, si no hay coincidencia, se genera un error, incluso si existen nombres de tabla coincidentes en otros esquemas en la base de datos.

Para mostrar la ruta de búsqueda actual, puede usar el siguiente comando:

SHOW search_path;

Y para poner el nuevo esquema en el camino, puede usar:

SET search_path TO myschema;

O si quieres múltiples esquemas:

SET search_path TO myschema, public;

Referencia: https://www.postgresql.org/docs/current/static/ddl-schemas.html

Ciro Pedrini
fuente
77

¿Quieres cambiar la base de datos?

\l - to display databases
\c - connect to new database

Actualizar.

He vuelto a leer tu pregunta. Para mostrar esquemas

\dn - list of schemas

Para cambiar el esquema, puedes intentar

SET search_path TO
miholeus
fuente
1
Cómo hacer esto no en psql. cómo "conectarse"
mathtick
46
\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.
Mohamed Sameer
fuente
16
No seas como yo olvidando el período después del nombre del esquema :) (¡gracias, Mohamed!)
anapaulagomes
1
Esto no responde la pregunta. Preguntó cómo cambiar el esquema predeterminado. No son los comandos básicos para psql.
Kenny Steegmans
27

Utilice el nombre del esquema con punto en el comando psql para obtener información sobre este esquema.

Preparar:

test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE

Mostrar lista de relaciones en test_schema:

test=# \dt test_schema.
               List of relations
   Schema    |     Name     | Type  |  Owner   
-------------+--------------+-------+----------
 test_schema | test_table   | table | postgres
 test_schema | test_table_2 | table | postgres
(2 rows)

Mostrar test_schema.test_tabledefinición:

test=# \d test_schema.test_table
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Mostrar todas las tablas en test_schema:

test=# \d test_schema.
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Table "test_schema.test_table_2"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

etc ...

klin
fuente
66
Me faltaba el período después de \ dt test_schema. que se traduce en "ninguna relación encontró mensaje" Gracias por los ejemplos, hizo mucho más fácil :)
mehany
14

Esto es antiguo, pero puse exportaciones en mi alias para conectarse a la base de datos:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"

Y para otro esquema:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"
bolsos tecnológicos
fuente
2
Buena idea. Omitiría exportel punto y coma en sus alias. De esta manera PGOPTIONSno se queda después de salir de psql.
Doron Gold el
Esta es una gran idea, mucho más práctica que agregar una SET search_patha cada consulta. ¡gracias!
hraban
6

palabra clave:

SET search_path TO

ejemplo:

SET search_path TO your_schema_name;
descarga de aplicaciones
fuente
4

La solución rápida podría ser:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";
Stanislav
fuente
0

si juegas con psql dentro de docker exec así:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name
andilabs
fuente