web-dev-qa-db-fra.com

Comment répertorier toutes les bases de données et tables à l'aide de psql?

J'essaie d'apprendre l'administration de PostgreSQL et j'ai commencé à 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 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, donc je sais qu'elles devraient être répertoriées.

1243
Jonas

Veuillez noter les commandes suivantes:

  • \list ou \l: liste toutes les bases de données
  • \dt: répertorie toutes les tables de la base de données actuelle à l'aide de votre search_path
  • \dt *.: répertorie toutes les tables de la base de données actuelle quel que soit votre search_path

Vous ne verrez jamais de tables dans d'autres bases de données, ces tables ne sont pas visibles. Vous devez vous connecter à la base de données correcte pour voir ses tables (et autres objets).

Pour changer de base de données:

\connect database_name ou \c database_name

Voir le manuel sur psql .

1639
Frank Heikens

Cela répertorie les bases de données:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Cela 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;
381
RolandoMySQLDBA

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 a déclaré plus simplement:

psql -U pgadmin -l

Ces commandes affichent 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 répertorient les tables disponibles

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

el@defiant$ psql -U pgadmin -d kurz_prod

Cela vous amène à un terminal psql:

kurz_prod=#

Utilisez la commande \d signifiant 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.

112
Eric Leschinski

\l est également un raccourci pour \list. Il existe plusieurs commandes slash que vous pouvez répertorier dans psql en utilisant \?.

74
Derek Arnold

Pour obtenir plus d'informations sur la base de données et la liste des tables, vous pouvez:

\l+ pour répertorier 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)
36
Soni Harriz

À 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 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 le * caractère générique pour le table_name. Le public table_schema 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.

33
Larry W

Il est possible que vous ayez inséré les tables dans un schéma qui ne se trouve pas dans votre chemin de recherche, ou la valeur par défaut, c'est-à-dire publique, et que les tables n'apparaissent 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 <databasename> set search_path=data, public;

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

19
John Powell