Si vous souhaitez lister tous tables, vous devez utiliser :
\dt *.*
pour indiquer que vous voulez toutes les tables dans tous les schémas . Cela inclura les tables dans pg_catalog
, les tables système et celles de information_schema
. Il n'y a pas de moyen intégré de dire "toutes les tables dans tous les schémas définis par l'utilisateur" ; vous pouvez cependant définir votre search_path
à une liste de tous les schémas d'intérêt avant d'exécuter \dt
.
Vous voudrez peut-être le faire par programmation, auquel cas psql
Les commandes antislash ne feront pas l'affaire. C'est là que le INFORMATION_SCHEMA
vient à la rescousse. Pour lister les tables :
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, si jamais vous voulez voir ce que psql
fait en réponse à une commande antislash, exécutez psql
avec le -E
drapeau. ex :
$ psql -E regress
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
d.datcollate as "Collate",
d.datctype as "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************
pour que vous puissiez voir que psql
recherche pg_catalog.pg_database
lorsqu'il obtient une liste de bases de données. De même, pour les tables d'une base de données donnée :
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
Il est préférable d'utiliser le standard SQL portable INFORMATION_SCHEMA
au lieu des catalogues système Pg si possible, mais parfois vous avez besoin d'informations spécifiques à Pg. Dans ces cas, il est bon d'interroger directement les catalogues système et psql -E
peut être un guide utile pour savoir comment procéder.