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.

littleK
la source

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.

RodeoClown
la source
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.

phsaires
la source
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.


la source
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)
Chris Shoesmith
la source
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).

Timofey
la source
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

germanlinux
la source
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'
hzh
la source
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)

Sally Levesque
la source