Liste des tables dans un schéma PostgreSQL

Quand je fais un dt dans psql, Je n'obtiens qu'une liste de tables dans le schéma actuel (public par défaut).

Comment puis-je obtenir une liste de toutes les tables dans tous les schémas, ou un schéma?

227
demandé sur Erwin Brandstetter 2013-03-26 21:56:59

4 réponses

Dans tous les schémas:

=> \dt *.*

Dans un schéma particulier:

=> \dt public.*

Il est possible d'utiliser des expressions régulières avec quelques restrictions

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Les utilisateurs avancés peuvent utiliser des notations d'expression régulière telles que des classes de caractères, par exemple [0-9] pour correspondre à n'importe quel chiffre. Tous les caractères spéciaux d'expression régulière fonctionnent comme spécifié dans la Section 9.7.3, sauf pour . qui est pris comme séparateur comme mentionné ci-dessus, * qui est traduit en expression régulière notation ., ? ce qui est traduit ., et $ qui correspond littéralement. Vous pouvez émuler ces caractères de modèle au besoin en écrivant ? pour ., (R+/) pour R , ou (R|) pour R?. $ n'est pas nécessaire en tant que caractère d'expression régulière puisque le motif doit correspondre au nom entier, contrairement à l'interprétation habituelle des expressions régulières (en d'autres termes, $ est automatiquement ajouté à votre motif). Écrivez * au début et / ou à la fin si vous ne souhaitez pas que le motif soit ancré. Notons qu'au sein de guillemets doubles, tous les caractères spéciaux d'expression régulière perdent leurs significations spéciales et sont appariés littéralement. En outre, les caractères spéciaux de l'expression régulière correspondent littéralement dans les modèles de nom d'opérateur (c'est-à-dire l'argument de \do).

354
répondu Clodoaldo Neto 2015-11-11 12:27:32

Vous pouvez sélectionner les tables à partir de information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
171
répondu Jakub Kania 2013-03-26 18:12:28

, Subsidiairement, à information_schema, il est possible d'utiliser pg_tables:

select * from pg_tables where schemaname='public';
34
répondu Radek Postołowicz 2015-05-28 14:39:51

Pour ceux qui viendront à travers cela dans le futur:

Si vous souhaitez voir une liste de relations pour plusieurs schémas:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
4
répondu Blee 2018-02-01 02:20:18