web-dev-qa-db-fra.com

Comment sélectionner un schéma dans postgres avec psql?

J'ai une base de données postgres avec plusieurs schémas. Lorsque je me connecte à la base de données à partir d'un shell avec psql et que je lance \dt, il utilise le schéma de connexion par défaut qui est public. Existe-t-il un indicateur que je peux spécifier ou comment puis-je modifier le schéma?

109
mehany

Dans PostgreSQL, le système détermine la table à suivre en suivant un chemin de recherche, qui est une liste de schémas dans lesquels rechercher.

La première table correspondante dans le chemin de recherche est considérée comme celle souhaitée, sinon, si aucune correspondance n'est trouvée, une erreur est générée, même si des noms de table correspondants existent dans d'autres schémas de la base de données.

Pour afficher le chemin de recherche actuel, vous pouvez utiliser la commande suivante:

SHOW search_path;

Et pour mettre le nouveau schéma dans le chemin, vous pouvez utiliser:

SET search_path TO myschema;

Ou si vous voulez plusieurs schémas:

SET search_path TO myschema, public;

Référence: https://www.postgresql.org/docs/current/static/ddl-schemas.html

135
Ciro Pedrini

Voulez-vous changer de base de données?

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

Mise à jour.

J'ai relu ta question. Pour afficher des schémas

\dn - list of schemas

Pour changer de schéma, vous pouvez essayer

SET search_path TO
64
miholeus

Utilisez le nom de schéma avec un point dans la commande psql pour obtenir des informations sur ce schéma.

Installer:

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

Afficher la liste des relations dans 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)

Afficher la définition de test_schema.test_table:

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

Afficher toutes les tables dans 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...

23
klin
\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'.
14
Mohamed Sameer

C'est vieux, mais je mets exports dans mon alias pour me connecter à la base de données:

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

Et pour un autre schéma:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h Host -U user -d database etc"
10
techbrownbags

mot-clé :

SET search_path TO

exemple :

SET search_path TO your_schema_name;
2
appsdownload