PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Psql elenca tutte le tabelle

Se desideri elencare tutti tabelle, devi usare:

\dt *.*

per indicare che vuoi tutte le tabelle in tutti gli schemi . Ciò includerà le tabelle in pg_catalog , le tabelle di sistema e quelle in information_schema . Non esiste un modo integrato per dire "tutte le tabelle in tutti gli schemi definiti dall'utente"; puoi, tuttavia, impostare il tuo search_path a un elenco di tutti gli schemi di interesse prima di eseguire \dt .

Potresti volerlo fare a livello di codice, nel qual caso psql i comandi backslash non faranno il lavoro. Qui è dove il INFORMATION_SCHEMA viene in soccorso. Per elencare le tabelle:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

A proposito, se mai vuoi vedere cosa psql sta facendo in risposta a un comando backslash, esegui psql con il -E bandiera. es:

$ 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;
**************************

quindi puoi vedere quel psql sta cercando pg_catalog.pg_database quando ottiene un elenco di database. Allo stesso modo, per le tabelle all'interno di un determinato database:

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;

È preferibile utilizzare INFORMATION_SCHEMA portabile standard SQL invece dei cataloghi del sistema Pg ove possibile, ma a volte sono necessarie informazioni specifiche per Pg. In questi casi va bene interrogare direttamente i cataloghi di sistema e psql -E può essere una guida utile su come farlo.