web-dev-qa-db-fra.com

Liste des tables dans un schéma PostgreSQL

Quand je fais un \dt dans psql, je ne reçois qu'une liste de tables dans le schéma actuel (public par défaut).

Comment obtenir une liste de toutes les tables de tous les schémas ou d'un schéma particulier?

285
Nyxynyx

Dans tous les schémas:

=> \dt *.*

Dans un schéma particulier:

=> \dt public.*

Il est possible d'utiliser expressions régulières avec certaines 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 les classes de caractères, par exemple [0-9] pour faire correspondre tout chiffre. Tous les caractères spéciaux d’expression régulière fonctionnent comme spécifié dans la Section 9.7.3, à l’exception de. qui est pris comme séparateur comme mentionné ci-dessus *, qui est traduit en notation d’expression régulière ,? qui est traduit en., et $ qui correspond littéralement. Vous pouvez émuler ces caractères de motif 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 car le modèle doit correspondre au nom complet, contrairement à l'interprétation habituelle des expressions régulières (en d'autres termes, $ est automatiquement ajouté à votre modèle). Écrivez * au début et/ou à la fin si vous ne souhaitez pas ancrer le motif. Notez que dans les guillemets doubles, tous les caractères spéciaux d’expression régulière perdent leur signification spéciale et sont appariés littéralement. De plus, les caractères spéciaux des expressions régulières sont appariés littéralement dans les modèles de nom d’opérateur (c’est-à-dire l’argument de\do).

433
Clodoaldo Neto

Vous pouvez sélectionner les tables de information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'
219
Jakub Kania

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

select * from pg_tables where schemaname='public';
44

Pour ceux qui rencontreront cela à l'avenir:

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
7
Blee