Listowanie wszystkich tabel, widoków oraz sekwencji w bazie danych PostgreSQL

Czasami potrzebujemy pobrać listę wszystkich tabel, widoków oraz sekwencji w bazie danych oraz ich właścicieli w bazie danych PostgreSQL by zmienić ich właściciela. Listowanie można wykonać następującym zapytaniem.

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' END as "Type",
  r.rolname as "Owner"
FROM pg_catalog.pg_class c
     JOIN pg_catalog.pg_roles r ON r.oid = c.relowner
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'v', 'S')
      AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;


Jeśli potrzebujemy dodać lub ograniczyć typy zwracane to należy zmodyfikować tablicę typów "c.relkind IN ('r', 'v', 'S')".
Lista typów:

  • r - tabela
  • v - widok
  • i - index
  • S - sekwencja
  • s - typ specjalny