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