Standard języka SQL obejmuje podstawowe typy danych: typy liczbowe, typy napisowe (ciągi znaków) oraz typy daty i czasu. Nie ma zgodności wśród producentów poszczególnych baz danych co do nazewnictwa oraz typów danych. Baza PostgreSQL posiada zdefiniowane następujące typy danych:
| Nazwa | Alias | Opis |
|---|---|---|
| bigint | int8 | ośmiobitowa liczba całkowita ze znakiem |
| bigserial | serial8 | ośmiobitowy licznik |
| bit [ (n) ] | - | ciąg bitów o ustalonej długości |
| bit varying [ (n) ] | varbit | ciąg bitów o zmiennej długości |
| boolean | bool | typ logiczny (prawda/fałsz) |
| bytea | - | dane binarne |
| character varying [ (n) ] |
varchar[(n)] | ciąg znaków o zmiennej długości |
| character [ (n) ] | char[(n)] | ciąg znaków o ustalonej długości |
| cidr | - | adres sieciowy IPv4 lub IPv6 |
| date | - | data (rok, miesiąc, dzień) |
| double precision | float8 | liczba rzeczywista o podwójnej precyzji |
| inet | - | adres sieciowy IPv4 lub IPv6 |
| integer int | int4 | czterobajtowa liczba całkowita ze znakiem |
| interval [ (p) ] | - | odstęp czasowy |
| macaddr | - | adres MAC |
| money | - | aktualna waluta |
| numeric [ (p, s) ] | decimal[(p,s)] | liczba o podanej precyzji |
| real | float4 | liczba rzeczywista - pojeduncza precyzja |
| smallint | int2 | dwubajtowa liczba całkowita ze znakiem |
| serial | serial4 | licznik czterobajtowy |
| text | - | tekst o zmiennej długości |
| time [ (p) ] [ without time zone ] | - | czas |
| time [ (p) ] with time zone | timetz | czas zawierający strefę czasową |
| timestamp [ (p) ] [ without time zone ] | - | data i czas |
| timestamp [ (p) ] with time zone | timestamptz | data, czas i strefa czasowa |
Dodatkowe typy danych opisujących elementy płaszczyzny:
| Nazwa | Alias | Opis |
|---|---|---|
| box | - | prostokąt |
| circle | - | okrąg |
| line | - | linia |
| lseg | - | zbiór linii |
| path | - | tor, droga |
| point | - | punkt |
| polygon | - | zamknięty wielokąt |
Jak w każdej bazie SQL także w PostgreSQL możemy utworzyć własne typy danych. Umożliwia to deklaracja CREATE TYPE, której składnia wygląda następująco:
CREATE TYPE nazwa_typu AS (nazwa_pola typ,....);
Przykładowa definicja współrzędnych x,y punktu może wyglądać następująco:
CREATE TYPE punkt AS (x int4,y int4);
W ten sposób zdefiniujemy nowy typ danych punkt o polach x,y