PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Psql wyświetla wszystkie tabele

Jeśli chcesz wymienić wszystkie tabele, musisz użyć:

\dt *.*

aby wskazać, że chcesz, aby wszystkie tabele we wszystkich schematach . Obejmuje to tabele w pg_catalog , tabele systemowe i te w information_schema . Nie ma wbudowanego sposobu powiedzenia „wszystkie tabele we wszystkich schematach zdefiniowanych przez użytkownika”; możesz jednak ustawić swoją search_path do listy wszystkich interesujących schematów przed uruchomieniem \dt .

Możesz to zrobić programowo, w takim przypadku psql polecenia z odwrotnym ukośnikiem nie wykonają zadania. W tym miejscu INFORMATION_SCHEMA przychodzi na ratunek. Aby wyświetlić tabele:

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

BTW, jeśli kiedykolwiek chcesz zobaczyć, co psql robi w odpowiedzi na polecenie odwrotnego ukośnika, uruchom psql z -E flaga. np.:

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

więc możesz zobaczyć, że psql przeszukuje pg_catalog.pg_database kiedy otrzyma listę baz danych. Podobnie dla tabel w danej bazie danych:

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;

Lepiej jest używać przenośnego INFORMATION_SCHEMA w standardzie SQL zamiast katalogów systemowych PG tam, gdzie to możliwe, ale czasami potrzebujesz informacji specyficznych dla PG. W takich przypadkach dobrze jest bezpośrednio odpytywać katalogi systemowe i psql -E może być pomocnym przewodnikiem, jak to zrobić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd:Uwierzytelnianie peera nie powiodło się dla postgres użytkownika podczas próby uruchomienia pgsql działającego z szynami

  2. Błąd podczas tworzenia przestrzennej bazy danych. BŁĄD:nie można załadować biblioteki /usr/pgsql-9.1/lib/rtpostgis-2.0.so

  3. Konfiguracje wielu centrów danych z PostgreSQL

  4. Wdrażanie PostgreSQL w kontenerze Docker

  5. Jak mogę uniemożliwić Postgresowi wstawianie podzapytania?