sql >> Database >  >> RDS >> PostgreSQL

Psql een lijst van alle tabellen

Als u alle wilt weergeven tabellen, moet u gebruiken:

\dt *.*

om aan te geven dat u alle tabellen in alle schema's . wilt . Dit omvat tabellen in pg_catalog , de systeemtabellen en die in information_schema . Er is geen ingebouwde manier om te zeggen "alle tabellen in alle door de gebruiker gedefinieerde schema's"; u kunt echter uw search_path . instellen naar een lijst met alle interessante schema's voordat u \dt . uitvoert .

Misschien wilt u dit programmatisch doen, in welk geval psql backslash-commando's zullen het werk niet doen. Dit is waar de INFORMATION_SCHEMA komt te hulp. Tabellen weergeven:

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

Trouwens, als je ooit wilt zien wat psql doet in reactie op een backslash-commando, voer psql . uit met de -E vlag. bijv.:

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

zodat je kunt zien dat psql zoekt pg_catalog.pg_database wanneer het een lijst met databases krijgt. Evenzo, voor tabellen binnen een bepaalde 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;

Het verdient de voorkeur om de SQL-standaard, draagbare INFORMATION_SCHEMA . te gebruiken in plaats van de Pg-systeemcatalogi waar mogelijk, maar soms heeft u Pg-specifieke informatie nodig. In die gevallen is het prima om de systeemcatalogi rechtstreeks te raadplegen, en psql -E kan een handige gids zijn om dit te doen.



  1. Retourneer alle externe sleutels en CONTROLEER-beperkingen in een SQL Server-database (T-SQL-voorbeelden)

  2. tabelrijen bijwerken in postgres met behulp van subquery

  3. Veldtypen en gebruik in Access 2019-databases

  4. wat is het verschil tussen join-trefwoord en inner join-trefwoord in oracle sql?