sql >> Databáze >  >> RDS >> PostgreSQL

Psql seznam všech tabulek

Pokud chcete uvést všechny tabulky, musíte použít:

\dt *.*

označíte, že chcete všechny tabulky ve všech schématech . To bude zahrnovat tabulky v pg_catalog , systémové tabulky a ty v information_schema . Neexistuje žádný vestavěný způsob, jak říci „všechny tabulky ve všech uživatelsky definovaných schématech“; můžete však nastavit search_path před spuštěním \dt na seznam všech zajímavých schémat .

Možná to budete chtít provést programově, v takovém případě psql zpětné lomítko-příkazy tuto práci nesplní. Zde je INFORMATION_SCHEMA přichází na pomoc. Seznam tabulek:

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

BTW, pokud chcete někdy vidět, co psql jako odpověď na příkaz zpětného lomítka spusťte psql pomocí -E vlajka. např.:

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

takže můžete vidět, že psql hledá pg_catalog.pg_database když dostane seznam databází. Podobně pro tabulky v dané databázi:

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;

Je vhodnější použít přenosný INFORMATION_SCHEMA standardu SQL místo katalogů systému Pg, kde je to možné, ale někdy potřebujete informace specifické pro Pg. V těchto případech je v pořádku dotazovat se přímo na systémové katalogy a psql -E může být užitečným průvodcem, jak to udělat.



  1. Jak dosáhnout shody s PCI pro MySQL a MariaDB pomocí ClusterControl - The Replay

  2. jak změnit datum na čas v oracle 10g

  3. Konfigurace replikace heterogenní databáze – SQL Server na Oracle

  4. Jak vybrat ze dvou tabulek v MySQL, i když ne všechny řádky v jedné tabulce mají korespondenty ve druhé?