Comment lister toutes les bases de données et tables avec psql?


935

J'essaie d'apprendre l'administration de PostgreSQL et je commence à apprendre à utiliser l'outil de ligne de commande psql .

Lorsque je me connecte avec psql --username=postgres , comment répertorier toutes les bases de données et toutes les tables?

J'ai essayé \d , d et dS+ mais rien n'est répertorié.J'ai créé deux bases de données et quelques tables avec pgAdmin III, je sais donc qu'elles devraient être répertoriées.

1,226

Veuillez noter les commandes suivantes:

  • \list ou \l : liste toutes les bases de données
  • \dt : liste toutes les tables de la base de données actuelle

Vous ne verrez jamais de tables dans d'autres 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

Voir le manuel sur psql .

+115

Vous pouvez utiliser '' '\ \ c db_name''' pour vous connecter à une certaine base de données. 17 févr.. 132013-02-17 08:57:50

+8

'\ dt' ne semble pas répertorier toutes les tables de la base de données actuelle (il semble exclure celles qui ne se trouvent pas dans le chemin' search_path' au moins sur la version 9.2) 06 août. 132013-08-06 19:42:24

+16

'\ dt * .' listera toutes les tables de tous les schémas, sans avoir à modifier votre chemin de recherche. 24 mars. 152015-03-24 16:10:34

+14

\ l + est mon préféré - il montre également l'utilisation du disque. 21 mai. 152015-05-21 05:57:42

  0

Sous Windows, je peux lister les bases de données avec cette commande 'psql -U nom_utilisateur -l' mais cela ne fonctionne pas avec la version slash. 06 oct.. 152015-10-06 15:37:48

  0

Je cherchais ce type de commande 'psql -c" \ l "template1' où je peux l'exécuter à partir de la ligne de commande. 26 mai. 172017-05-26 19:45:51

  0

À noter (version 9.6): Avec plus de 2 schémas dans votre search_path et le même nom de table présent dans différents schémas, \ dt renverra uniquement la première table du même nom, en fonction de l'ordre dans search_path.J'ai trouvé ça bizarre. 17 oct.. 172017-10-17 16:25:29


64

\l est également un raccourci pour \list .Il existe de nombreuses commandes slash que vous pouvez lister dans psql en utilisant \? .


256

Ceci liste les bases de données:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Ceci liste les tables dans la base de données courante

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
+10

Vous avez raison, mais la question portait sur les méta-commandes de l'outil psql.\ dt est beaucoup plus facile que de taper une requête. 18 févr.. 112011-02-18 07:50:28

+11

Je pense que c’est une excellente réponse car il peut être exécuté à partir d’une ligne de commande Linux au lieu d’être dans l’interpréteur psql qui se bloque parfois pour moi avec ExtraPutty. 16 mai. 152015-05-16 17:51:18

+1

Aussi sauvé ma journée.Dans mon cas particulier, j'ajoute 'WHERE table_schema = 'public'' car je souhaite supprimer uniquement les tables personnalisées. 28 sept.. 152015-09-28 15:31:58

+18

Si vous démarrez psql avec l'indicateur -E, la requête réelle s'affichera lorsque vous utiliserez une méta-commande. 13 janv.. 162016-01-13 09:03:31

  0

C'est une bonne réponse.Bien qu'OP souhaitait les métacommandes, j'étais sur Google pour cela, et cela m'a amené à cette question. 03 août. 172017-08-03 00:40:17


88

Dans Postgresql, ces commandes de terminal listent les bases de données disponibles

[email protected] $/bin/psql -h localhost --username=pgadmin --list

Ou la commande a déclaré 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)

Ce sont les bases de données disponibles.

Dans PSQL, ces commandes listent les tables disponibles

Vous devez spécifier une base de données avant de pouvoir répertorier les tables de cette base.

[email protected]$ psql -U pgadmin -d kurz_prod

Cela vous amène à un terminal psql:

kurz_prod=#

Utilisez la commande \d signifie afficher toutes les tables, vues et séquences.

kurz_prod=# \d

Cela 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.Ce sont les tables de cette base de données.

+4

\ d ne fait pas que lister les tables: '\ d [S +] liste les tables, les vues et les séquences' 06 août. 132013-08-06 19:43:18

+2

Pour moi, c'est la réponse "correcte" car elle ne nécessite pas d'être déjà connecté à une base de données existante. 14 mars. 172017-03-14 15:11:47


25

Depuis pg_Admin, vous pouvez simplement exécuter les opérations suivantes sur votre base de données actuelle. Toutes les tables du schéma spécifié seront alors récupérées:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
     AND table_schema = 'public' 
ORDER BY table_type, table_name

Cela vous donnera une liste de toutes les tables permanentes (généralement les tables que vous recherchez).Vous pouvez obtenir uniquement les noms de table si vous modifiez la*joker pour juste latable_name.Le publictable_schemaest le schéma par défaut pour la plupart des bases de données, sauf si votre administrateur a configuré un nouveau schéma.

+3

Bien que cela soit vrai, cela s'adresse à un client différent de celui sur lequel l'OP a été interrogé. 29 nov.. 122012-11-29 17:56:23


17

Il est possible que vous ayez inséré les tables dans un schéma qui ne se trouve pas dans le chemin de recherche ou dans celui par défaut, c'est-à-dire public. Les tables ne s'afficheront donc pas avec \ dt.Si vous utilisez un schéma appelé, disons, données, vous pouvez résoudre ce problème en exécutant:

alter database set search_path=data, public;

Quittez et entrez à nouveau psql et \ dt vous montrera également les tables dans les données du schéma.

+1

Eh bien, un simple 'set search_path = data, public;' ferait l'affaire aussi :) 03 avril. 142014-04-03 14:57:26

  0

@dezso, est ce que le changement est fait de manière permanente, ou juste dans cette session psql? 03 avril. 142014-04-03 17:40:36

  0

Euh, je n'étais pas très clair.C'était destiné au lieu du cycle de déconnexion-connexion. 03 avril. 142014-04-03 18:12:37


24

Pour obtenir plus d'informations sur la base de données et la liste de tables, vous pouvez effectuer les opérations suivantes:

\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 de la base de données courante.

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)