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?
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
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
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...
\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'.
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"
mot-clé :
SET search_path TO
exemple :
SET search_path TO your_schema_name;