PostgreSQL - schematy, tabele, relacje



Poniżej ciąg dalszy artykułu:

PostgreSQL - bazy danych


Listowanie schematów

SELECT schema_name
FROM information_schema.schemata;
 
    schema_name
--------------------
 pg_toast
 pg_temp_1
 pg_toast_temp_1
 pg_catalog
 public
 information_schema
(6 wierszy)

Alternatywny sposób:

SELECT nspname
FROM pg_catalog.pg_namespace;
 
      nspname
--------------------
 pg_toast
 pg_temp_1
 pg_toast_temp_1
 pg_catalog
 public
 information_schema
(6 wierszy)

Można także uzyskać podobny efekt przy pomocy psql'a.

postgres-# \dn[S+]
 
                                      Lista schematów
       Nazwa        | Właściciel | Uprawnienia dostępu  |               Opis
--------------------+------------+----------------------+----------------------------------
 information_schema | postgres   | postgres=UC/postgres+|
                    |            | =U/postgres          |
 pg_catalog         | postgres   | postgres=UC/postgres+| system catalog schema
                    |            | =U/postgres          |
 pg_temp_1          | postgres   |                      |
 pg_toast           | postgres   |                      | reserved schema for TOAST tables
 pg_toast_temp_1    | postgres   |                      |
 public             | postgres   | postgres=UC/postgres+| standard public schema
                    |            | =UC/postgres         |
(6 wierszy)

Listowanie tabel dostępnych w bazie
(wszystkie schematy)

W poniższym zapytaniu wyłączyłem tabele techniczne, gdyż wynik zapytania byłby na parę stron.

SELECT table_name 
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','pg_catalog');
 
 table_name
------------
 table_1
 table_2
 table_3
(3 wiersze)

Informacja o danej tabeli z plsql'a

postgres=# \d table_1
 
            Tabela "public.table_1"
 Kolumna |          Typ          | Modyfikatory
---------+-----------------------+--------------
 id      | integer               | niepusty
 name    | character varying(20) | niepusty
 age     | integer               | niepusty
 address | character(25)         |
 salary  | numeric(18,2)         |
Indeksy:
    "table_1_pkey" PRIMARY KEY, btree (id)

Wielkości tabel

Wielkość samej tabeli

SELECT pg_relation_size('table_1');
 
 pg_relation_size
------------------
             8192
(1 wiersz)

Wielkość tabeli łacznie z dodatkowymi obiektami, np. indeksami

SELECT pg_total_relation_size('table_1');
 
 pg_total_relation_size
------------------------
                  24576
(1 wiersz)

Sposób na wykonanie tego z psql'a

postgres=# \dt+ table_1
 
                        Lista relacji
 Schemat |  Nazwa  |  Typ   | Właściciel |  Rozmiar   | Opis
---------+---------+--------+------------+------------+------
 public  | table_1 | tabela | postgres   | 8192 bytes |
(1 wiersz)

Znajdowanie największej tabeli (wielkość łączna) w public'u

SELECT nspname || '.' || relname AS "tabela",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "rozmiar"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
AND nspname = 'public'
ORDER BY pg_total_relation_size(C.oid) DESC;
 
     tabela     |  rozmiar
----------------+------------
 public.table_1 | 24 kB
 public.table_2 | 8192 bytes
 public.table_3 | 8192 bytes
(3 wiersze)

Sposób bez dodatkowych obiektów

SELECT table_name, pg_relation_size(table_name) AS size
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
ORDER BY size DESC;
 
 table_name | size
------------+------
 table_1    | 8192
 table_2    |    0
 table_3    |    0
(3 wiersze)

Wielkości relacji

Znajdowanie największego obiektu w bazie

SELECT nspname || '.' || relname as "tabela", pg_size_pretty(pg_relation_size(C.oid)) AS "rozmiar" 
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC;
 
            tabela             |  rozmiar
-------------------------------+------------
 pg_toast.pg_toast_2618        | 344 kB
 public.table_1_pkey           | 16 kB
 pg_toast.pg_toast_2619_index  | 16 kB
 pg_toast.pg_toast_2619        | 16 kB
 pg_toast.pg_toast_2618_index  | 16 kB
 pg_toast.pg_toast_11765_index | 8192 bytes
 pg_toast.pg_toast_11770_index | 8192 bytes
 ...

Mam nadzieję, że zapytania będą pomocne :)