Jessaie dapprendre ladministration de PostgreSQL et jai commencé à apprendre à utiliser loutil de ligne de commande psql
.
Lorsque je me connecte avec psql --username=postgres
, comment puis-je lister toutes les bases de données et tables?
Jai essayé \d
, d
et dS+
mais rien nest répertorié. Jai créé deux bases de données et quelques tables avec pgAdmin III, donc je sais quelles devraient être répertoriées.
Commentaires
Répondre
Veuillez noter les commandes suivantes:
-
\list
ou\l
: lister toutes les bases de données -
\dt
: répertoriez toutes les tables de la base de données actuelle à laide de votresearch_path
-
\dt *.
: listez toutes les tables de la base de données actuelle quel que soit votresearch_path
Vous ne verrez jamais de tables dans dautres bases de données, ces tables ne sont pas visibles. Vous devez vous connecter à la bonne base de données pour voir ses tables (et autres objets).
Pour changer de base de données:
\connect database_name
ou \c database_name
Consultez le manuel sur psql .
Commentaires
- Vous pouvez utiliser
\c db_name
pour vous connecter à une certaine base de données. -
\dt
ne ‘ t semble lister toutes les tables de la base de données actuelle (il semble exclure celles qui ne sont pas ‘ trouvées dans lesearch_path
au moins le 9.2) -
\dt *.
listera toutes les tables de tous les schémas, sans avoir à modifier votre chemin de recherche. - \ l + is mon préféré – il montre également lutilisation du disque.
- Sous Windows, je peux lister les bases de données avec cette commande
psql -U username -l
mais cela ne fonctionne pas avec la version slash.
Réponse
Ceci répertorie les bases de données:
SELECT datname FROM pg_database WHERE datistemplate = false;
Ceci répertorie les tables de la base de données actuelle
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Commentaires
- Vous ‘ cest vrai, mais la question portait sur les méta-commandes de loutil psql. \ dt est beaucoup plus facile que de taper nimporte quelle requête.
- Je pense que cest une excellente réponse car elle peut être exécutée à partir dune ligne de commande Linux au lieu de devoir être dans linterpréteur psql qui se bloque parfois pour moi en utilisant ExtraPutty.
- Jai aussi sauvé ma journée. Pour mon cas particulier, jajoute ‘
WHERE table_schema = 'public'
parce que je veux supprimer uniquement les tableaux personnalisés. - Si vous commencez psql avec le drapeau -E, il affichera la vraie requête lorsque vous utilisez une méta-commande.
- Oui, je pense que ‘ est une bonne réponse car elle vous permet de rejoindre et dinterroger les bases de données de manière plus contrôlée, en particulier lorsque vous souhaitez générer un script à partir dune grande liste de bases de données. Merci.
Réponse
Dans Postgresql, ces commandes de terminal répertorient les bases de données disponibles
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Ou la commande énoncée plus simplement:
psql -U pgadmin -l
Ces commandes impriment ceci sur le terminal:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- kurz_prod | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | pgadmin | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows)
Voici les bases de données disponibles.
En PSQL ces commandes listent les tables disponibles
Vous devez spécifier une base de données avant de peut lister les tables de cette base de données.
el@defiant$ psql -U pgadmin -d kurz_prod
Ceci vous amène à un terminal psql:
kurz_prod=#
Utilisez la commande \d
qui signifie afficher toutes les tables, vues et séquences
kurz_prod=# \d
Ceci imprime:
List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows)
Ensuite, pour quitter le terminal psql, tapez \q
et appuyez sur Entrée. Ou Ctrl-D
fait la même chose. Voici les tables de cette base de données.
Commentaires
- \ d ne fait pas que lister les tables:
\d[S+] list tables, views, and sequences
- Pour moi, cest la réponse » correcte » car elle ne ‘ t nécessite que vous soyez déjà connecté à une base de données existante.
- Une doublure à utiliser dans les scripts (en tant que root):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Réponse
\l
est également un raccourci pour \list
. Il y a pas mal de commandes slash, que vous pouvez lister dans psql en utilisant \?
.
Réponse
Pour obtenir plus dinformations sur la base de données et la liste des tables, vous pouvez faire:
\l+
pour lister les bases de données
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description ------------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- pgbench | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 29 MB | pg_default | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 6073 kB | pg_default | default administrative connection database slonmaster | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1401 MB | movespace | slonslave | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 32 MB | pg_default | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5785 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5985 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 13 MB | pg_default | (7 rows)
et
\d+
pour répertorier toutes les tables du schéma search_path actuel dans la base de données actuelle.
test=# \dn+ --list schemas List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | schema1 | postgres | postgres=UC/postgres+| | | =UC/postgres | (2 row) test=# set search_path to schema1, public; SET test=# \d+ List of relations Schema | Name | Type | Owner | Size | Description ---------+-----------------+-------+--------------+------------+------------- public | all_units | table | postgres | 0 bytes | public | asset | table | postgres | 16 kB | public | asset_attribute | table | postgres | 8192 bytes | public | food | table | postgres | 48 kB | public | name_log | table | postgres | 8192 bytes | public | outable | table | ordinaryuser | 0 bytes | public | outable2 | table | ordinaryuser | 0 bytes | public | test | table | postgres | 16 kB | public | usr | table | postgres | 5008 kB | schema1 | t1 | table | postgres | 0 bytes | (10 rows)
Réponse
À partir de pg_Admin, vous pouvez simplement exécuter ce qui suit sur votre base de données actuelle et il obtiendra toutes les tables pour le schéma spécifié:
SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name
Cela vous obtiendra une liste de toutes les tables permanentes (généralement les tables que vous « recherchez). Vous pouvez obtenir uniquement les noms des tables si vous remplacez le caractère générique *
par le table_name
. Le table_schema
public est le schéma par défaut pour la plupart des bases de données, sauf si votre administrateur a configuré un nouveau schéma.
Commentaires
- Bien que cela soit vrai, cela sadresse à un client différent que lOP a demandé.
- Cela a très bien fonctionné pour moi, et bien que mon cas dutilisation ne soit pas exactement ce que lOP demandait, cela ma aidé à obtenir la liste des tables lorsque je suis connecté via wrapper (dans Julialang LibPQ.jl )
Réponse
Il est possible que vous ayez inséré les tableaux dans un schéma qui nest pas dans votre chemin de recherche, ou la valeur par défaut, cest-à-dire, public et donc les tables ne safficheront pas en utilisant \ dt. Si vous utilisez un schéma appelé, par exemple, data, vous pouvez résoudre ce problème en exécutant,
alter database <databasename> set search_path=data, public;
Quittez et entrez à nouveau psql et maintenant \ dt vous montrera également les tableaux des données de schéma.
Commentaires
- Eh bien, un simple
set search_path=data, public;
ferait laffaire aussi 🙂 - @dezso, est-ce que cela fait le changement de façon permanente, ou juste dans cette session psql?
- Euh, je nai pas été très clair. Cétait prévu au lieu du cycle de déconnexion-connexion.
psql -l
psql --username=postgres -l
.