Lister toutes les tables dans postgresql information_schema


200

Quelle est la meilleure façon de lister toutes les tables dans le schéma_information de PostgreSQL?

Pour clarifier: je travaille avec une base de données vide (je n'ai ajouté aucune de mes propres tables), mais je veux voir chaque table dans la structure information_schema.

Réponses:


276

Vous devriez pouvoir simplement exécuter select * from information_schema.tablespour obtenir une liste de chaque table gérée par Postgres pour une base de données particulière.

Vous pouvez également ajouter un where table_schema = 'information_schema'pour afficher uniquement les tables du schéma d'informations.


4
Merci, j'ai juste essayé: / dt (astérisque). (Astérisque) est-ce différent?
littleK

Je ne sais rien de la chose / dt (astérisque). (Astérisque), désolé. Je viens d'exécuter la requête de sélection dans postgres et il répertorie les informations sur toutes les tables qu'il contient. Essayez d'exécuter l'instruction select (sur votre base de données vide) et voyez ce qu'elle renvoie.
RodeoClown

Essayer la commande ci-dessus répertorie les tables suivantes dans information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Alors, quelle est la différence entre ces tables et celles dans information_schema.tables?
littleK

2
Toutes les tables que vous avez répertoriées (via la commande / dt) fournissent des méta-informations sur la base de données. Chacun des tableaux répertoriés montre des informations différentes. Ainsi, par exemple, la table information_schema.tables répertorie toutes les tables de la base de données et leurs attributs (comme pouvoir voir s'il s'agit d'une table ou d'une vue, quel est le nom et d'autres informations de ce genre). Le tableau information_schema.sql_features montrera quelles fonctionnalités sont activées sur la base de données (donc je peux voir que j'ai Embedded C pris en charge sur ma base de données, ainsi que SQL direct).
RodeoClown

1
Vous pouvez exécuter un select * sur chacune des tables répertoriées par la commande dt - elle vient de vous montrer une liste de tables contenant des métadonnées sur la base de données.
RodeoClown

112

Pour lister vos tables, utilisez:

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

Il répertorie uniquement les tables que vous créez.


Que diriez-vous des tables que vous ne créez pas mais auxquelles vous avez l'autorisation d'accès?
huy

4
Cela n'affichera que les tables du schéma public. Vous pouvez créer des tables dans d'autres schémas.
Joe Van Dyk

De plus, cela ne fera pas de distinction entre les tables et les vues.
jayarjo

44
\dt information_schema.

depuis psql, ça devrait aller.


14

La COMMANDE "\ z" est également un bon moyen de lister les tables à l'intérieur de la session psql interactive.

par exemple.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Cela ne répertorie pas les tables dans des schémas autres que publics .
Kenny Evitt

10

Vous pouvez également utiliser

select * from pg_tables where schemaname = 'information_schema'

En général, les tables pg * vous permettent de tout voir dans la base de données, sans contrainte à vos autorisations (si vous avez accès aux tables bien sûr).


9

Pour un schéma privé 'xxx'dans postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Sans table_type = 'BASE TABLE', vous listerez les tableaux et les vues


8

1. récupérez toutes les tables et vues de information_schema.tables, incluez celles de information_schema et pg_catalog.

select * from information_schema.tables

Les tables et les vues 2.get appartiennent à certains schémas

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.get uniquement les tables (presque \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Si vous ne filtrez pas par type_table, vous obtiendrez toutes sortes d'objets, tels que des tables et des vues mélangées.
russellhoff

À quoi ça where table_schema not in ('information_schema', 'pg_catalog')sert exactement ?
jayarjo

1

Si vous voulez une requête simple et rapide:

select * from information_schema.tables

Vous pouvez l'exécuter directement dans l'éditeur de requêtes sans avoir à ouvrir psql.

(D'autres articles suggèrent de belles requêtes d'informations plus spécifiques, mais en tant que nouveau, je trouve que cette requête à une ligne m'aide à maîtriser le tableau)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.