PostgreSQL - bazy danych



Każda relacyjna baza danych zawiera obiekty takie jak tabele i relacje. Chyba nie trzeba nikomu tłumaczyć co to takiego. PostgreSQL zawiera dodatkowo obiekty takie jak schematy. Schemat w PostgreSQL to taka kolekcja tabel, widoków, indeksów funkcji i innych obiektów bazy danych. W najprostrzym ujęciu można by było przyrównać je do katalogów w systemie operacyjnym, z tą różnicą, że schematów nie można zagnieżdżać. Poniżej przedstawiam kilka standardowych zapytań operujących na schematach, tabelach i relacjach, które warto znać. Zamieszczam także wyniki danych zapytań, byście mieli ogólny pogląd na to jak to wygląda w realiach. Zapytania przeprowadzone na świeżo postawionej bazie danych.


Listowanie wszystkich baz danych

SELECT * FROM pg_database;
 
  datname  | datdba | encoding | datcollate  | 
-----------+--------+----------+-------------+-
 template1 |     10 |        6 | pl_PL.UTF-8 | 
 template0 |     10 |        6 | pl_PL.UTF-8 | 
 postgres  |     10 |        6 | pl_PL.UTF-8 | 
 test      |     10 |        6 | pl_PL.UTF-8 | 
 test2     |     10 |        6 | pl_PL.UTF-8 | 
(5 wierszy)

Wielkości baz danych

Łączną wielkość wszystkich baz danych możemy sprawdzić następująco:

SELECT sum(pg_database_size(datname)) 
FROM pg_database;
 
   sum
----------
 33186868
(1 wiersz)

Wielkości poszczególnych baz danych:

SELECT datname, pg_database_size(datname)
FROM pg_database 
GROUP BY datname;
 
  datname  | pg_database_size
-----------+------------------
 postgres  |          6729492
 template0 |          6578692
 template1 |          6586884
 test      |          6704916
 test2     |          6586884
(5 wierszy)

Troszeczke przyjaźniejsza dla oka wersja:

SELECT datname, pg_size_pretty(pg_database_size(datname))
FROM pg_database 
GROUP BY datname;
 
  datname  | pg_size_pretty
-----------+----------------
 postgres  | 6572 kB
 template0 | 6425 kB
 template1 | 6433 kB
 test      | 6548 kB
 test2     | 6433 kB
(5 wierszy)

Jak można zauważyć wszystkie domyślne wielkości są podawane w bajtach.
Możemy także wydać zapytanie co do wielkości używanej aktualnie bazy danych:

SELECT current_database();
 
 current_database
------------------
 postgres
(1 wiersz)

SELECT pg_size_pretty(pg_database_size(current_database()));
 
 pg_size_pretty
----------------
 6572 kB
(1 wiersz)

PostgreSQL - Schematy, tabele, relacje - ciąg dalszy