Ако искате да изброите всички таблици, трябва да използвате:
\dt *.*
за да посочите, че искате всички таблици във всички схеми . Това ще включва таблици в pg_catalog
, системните таблици и тези в information_schema
. Няма вграден начин да се каже "всички таблици във всички дефинирани от потребителя схеми"; можете обаче да зададете своя search_path
към списък с всички схеми, които представляват интерес, преди да стартирате \dt
.
Може да искате да направите това програмно, в който случай psql
обратно наклонена черта-команди няма да свършат работа. Това е мястото, където INFORMATION_SCHEMA
идва на помощ. За да изброите таблици:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, ако някога искате да видите какво е psql
прави в отговор на обратна наклонена черта команда, стартирайте psql
с -E
флаг. напр.:
$ 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;
**************************
така че можете да видите този psql
търси pg_catalog.pg_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;
За предпочитане е да използвате стандартния SQL, преносим INFORMATION_SCHEMA
вместо системните каталози на Pg, където е възможно, но понякога се нуждаете от специфична за Pg информация. В тези случаи е добре да потърсите директно системните каталози и psql -E
може да бъде полезно ръководство за това как да го направите.