Quel est le meilleur moyen de lister toutes les tables dans information_schema de PostgreSQL?
Pour clarifier: je travaille avec une base de données vide (je n'ai ajouté aucune de mes propres tables), mais je souhaite voir toutes les tables de la structure information_schema.
Vous devriez pouvoir exécuter simplement select * from information_schema.tables
pour obtenir une liste de toutes les tables gérées 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 dans le schéma d'informations.
Pour lister vos tables, utilisez:
SELECT table_name FROM information_schema.tables WHERE table_schema='public'
Il ne listera que les tables que vous avez créées.
\dt information_schema.
de psql, ça devrait aller.
Le "\ z" COMMAND est également un bon moyen de lister les tables dans la session interactive psql.
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)
Vous pouvez aussi utiliser
select * from pg_tables where schemaname = 'information_schema'
En général, les tables * vous permettent de tout voir dans la base de données, sans être contraint par vos autorisations (si vous avez accès aux tables bien sûr).
Pour le 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 tables et vues
1.Obtenez toutes les tables et vues de information_schema.tables, y compris celles de information_schema et pg_catalog.
select * from information_schema.tables
Les tables 2.get et les vues appartiennent à certains schémas
select * from information_schema.tables
where table_schema not in ('information_schema', 'pg_catalog')
3.get tables seulement (presque\dt)
select * from information_schema.tables
where table_schema not in ('information_schema', 'pg_catalog') and
table_type = 'BASE TABLE'
Si vous voulez une requête one-liner rapide et sale:
select * from information_schema.tables
Vous pouvez l'exécuter directement dans l'outil de requête sans avoir à ouvrir psql.
(D'autres articles suggèrent de Nice des requêtes plus spécifiques sur information_schema mais, comme nouveau, je découvre que cette requête à réponse unique m'aide à comprendre le tableau)