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 :)