PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Psql изброява всички таблици

Ако искате да изброите всички таблици, трябва да използвате:

\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 може да бъде полезно ръководство за това как да го направите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конкатенираме низове в PostgreSQL

  2. Как да актуализирам автоматично времеви печат в PostgreSQL

  3. функцията връща множество колони като една колона вместо множество колони

  4. Инструкция GROUP BY + CASE

  5. Получавате размер на голям обект в заявка на PostgreSQL?