PostgreSQL Typy danych: bajt, numeryczny, znakowy, binarny
PostgreSQL oferuje bogaty zestaw natywnych typów danych dla użytkowników. Użytkownicy mogą dodawać nowe typy za pomocą polecenia CREATE TYPE. Sprawia również, że zapytania są prostsze i bardziej czytelne.
Typy danych w PostgreSQL
PostgreSQL obsługuje następujące typy danych:
- Typy tekstu
- Typy numeryczne
- Daty i godziny
- XML
- JSON
- Boolean
- Bity
- Dane binarne
- Sieć
- Tablice
- Utwórz swój typ danych
- Boolean
- Temporal
- UUID
- Szyk
- JSON
- Specjalne typy danych do przechowywania adresu sieciowego i danych geometrycznych.
Pouczmy się PostgreSQL szczegółowo typy danych
Typy danych znaków
PostgreSQL obsługuje znakowe typy danych do przechowywania wartości tekstowych. PostgreSQL buduje znakowe typy danych na podstawie tych samych struktur wewnętrznych. PostgreSQL oferuje trzy znakowe typy danych: CHAR(n), VARCHAR(n) i TEXT.
Imię | Opis |
---|---|
varchar(n) | Umożliwia zadeklarowanie zmiennej długości z limitem |
Znak (n) | Stała długość, pusta wyściółka |
Tekst | Use może użyć tego typu danych do zadeklarowania zmiennej o nieograniczonej długości |
Numeryczne typy danych
PostgreSQL obsługuje dwa różne typy liczb:
- Liczby całkowite
- Liczb zmiennoprzecinkowych
Imię | Rozmiar sklepu | łodzie |
---|---|---|
małyint | 2 bajtów | -32768 do + 32767 |
liczba całkowita | 4 bajtów | -2147483648 do + 2147483647 |
bigint | 8 bajtów | -9223372036854775808 do 9223372036854775807 |
dziesiętny | zmienna | Jeśli zadeklarowałeś to jako dziesiętny, typ danych ma zakres od 131072 cyfr przed przecinkiem do 16383 cyfr po przecinku |
numeryczna | zmienna | Jeśli zadeklarujesz to jako liczbę, możesz podać liczbę do 131072 cyfr przed przecinkiem do 16383 cyfr po przecinku |
real | 4 bajtów | Dokładność 6 cyfr dziesiętnych |
Podwójna | 8 bajtów | Dokładność 15 cyfr dziesiętnych |
Binarne typy danych
Ciąg binarny to sekwencja oktetów lub bajtów. Binarne typy danych Postgres są podzielone na dwa sposoby.
- Ciągi binarne umożliwiają przechowywanie kursów o wartości zero
- Oktety niedrukowalne
Ciągi znaków nie pozwalają na oktety zerowe, a także na inne wartości i sekwencje oktetów, które są nieprawidłowe zgodnie z regułami kodowania zestawu znaków bazy danych.
Imię | Rozmiar pamięci | Opis |
---|---|---|
Bajt | 1 do 4 bajtów plus rozmiar ciągu binarnego | Ciąg binarny o zmiennej długości |
Typ adresu sieciowego
Wiele aplikacji przechowuje informacje sieciowe, takie jak adresy IP użytkowników lub czujniki. PostgreSQL ma trzy typy natywne, które pomagają zoptymalizować dane sieciowe.
Imię | Rozmiar | Opis |
---|---|---|
jabłecznik | 7 lub 19 bajty | IPV4 i IPv6 sieci |
Inet | 7 lub 19 bajty | Hosty i sieci IPV4 i IPV5 |
makaddr | 6 bajtów | Adresy MAC |
Korzystanie z typów adresów sieciowych ma następujące zalety
- Oszczędność miejsca do przechowywania
- Sprawdzanie błędów wejściowych
- Funkcje takie jak wyszukiwanie danych według podsieci
Typ wyszukiwania tekstowego
PostgreSQL zapewnia dwa typy danych, które są zaprojektowane do obsługi wyszukiwania pełnotekstowego. Wyszukiwanie pełnotekstowe polega na przeszukiwaniu zbioru dokumentów w języku naturalnym w celu znalezienia tych, które najlepiej pasują do zapytania.
- Wyszukiwanie tekstu wektorowego PostgreSQL typy zmiennych reprezentują dokument w formie zoptymalizowanej pod kątem wyszukiwania tekstowego
- Wyszukiwanie tekstowe typu zapytania przechowuje słowa kluczowe, które należy przeszukać
Typy danych daty/godziny
PostgreSQL timestamp oferuje precyzję mikrosekundową zamiast drugiej precyzji. Co więcej, masz również możliwość przechowywania ze strefą czasową lub bez. PostgreSQL skonwertuje znacznik czasu ze strefą czasową na UTC na wejściu i zapisze go.
Wprowadzanie daty i godziny jest akceptowane w różnych formatach, w tym w tradycyjnym Postgres, ISO 8601. Kompatybilny z SQL itp.
PostgreSQL obsługuje porządkowanie dnia/miesiąca/roku. Obsługiwane formaty to DMY, MDY, YMD
Tymczasowe typy danych
Imię | Rozmiar | łodzie | Rozkład |
---|---|---|---|
Znacznik czasu bez strefy czasowej | 8 bajtów | 4713 pne do 294276 ne | 1 mikrosekunda/14 cyfr |
Znacznik czasu ze strefą czasową | 8 bajtów | 4713 pne do 294276 ne | 1 mikrosekunda/14 cyfr |
dane | 4 bajtów | 4713 pne do 294276 ne | Pewnego dnia |
Czas bez strefy czasowej | 8 bajtów | 00:00:00 to 24:00:00 | 1 mikrosekunda/14 cyfr |
Czas ze strefą czasową | 12 bajtów | 00:00:00 + 1459 do 24:00:00-1459 | 1 mikrosekunda/14 cyfr |
Przedział | 12 bajtów | -178000000 do 178000000 lat | 1 mikrosekunda/14 cyfr |
Przykłady
Wkład | Opis |
---|---|
2025-09-07 | ISO 8601, 7 września z dowolnym stylem daty (zalecany format) |
7 września 2025 r. | 7 września w dowolnym stylu daty |
9/7/2025 | 7 września z MDY, 9 lipca z DMY |
9/7/25 | 7 września 2025 r. z MDY |
2025-Sep-7 | 7 września w dowolnym stylu daty |
7-wrzesień-2018 | 7 września w dowolnym stylu daty |
7-Sep-25 | 7 września 2025 r. z YMD |
20250907 | ISO 8601,7 września 20225 w dowolnym trybie |
2025.250 | rok i dzień roku, w tym przypadku 7 września 2025 r |
J25250 | Data juliańska |
Czas/czas z wprowadzeniem strefy czasowej
Wkład | Opis |
---|---|
11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
11: 19 AM | Tak samo jak o 11:19 |
11: 19 PM | tak samo jak 23:19 |
23: 19-3 23: 19-03: 00 231900-03 |
ISO 8601, tak samo jak o 11:19 EST |
23: 19 EST | strefa czasowa określona jako EST, taka sama jak 11:19 EST |
Typ logiczny
Typ danych Boolean może przechowywać
- Prawdziwy
- Fałszywy
- zero
wartości.
Używasz bool or boolean słowo kluczowe służące do zadeklarowania kolumny o typie danych Boolean.
Kiedy wstawisz wartości do kolumny logicznej, Postgre konwertuje wartości takie jak
- Tak
- y
- 1
- t
- prawdziwy
do 1.
Chociaż wartości takie jak
- Nie
- N
- 0
- F
- Fałszywy
są konwertowane na 0
Podczas wybierania danych wartości są ponownie konwertowane na tak, prawda, y itd.
Geometryczne typy danych
Typy danych geometrycznych reprezentują dwuwymiarowe obiekty przestrzenne. Pomagają wykonywać operacje takie jak obroty, skalowanie, translacje itp.
Imię | Rozmiar pamięci | Reprezentacja | Opis |
---|---|---|---|
punkt | 16 bajtów | Punkt na płaszczyźnie | (x, y) |
Linia | 32 bajtów | Nieskończona linia | ((xl.yl).(x2.y2)) |
Lseg | 32 bajtów | Skończony odcinek linii | ((xl.yl).(x2.y2)) |
Box | 32 bajtów | Prostokątny Box | ((xl.yl).(x2.y2)) |
ścieżka | 16n + 16n bajtów | Zamknij i otwórz ścieżkę | ((xl.yl),…) |
Wielokąt | 40 + 16n bajtów | Wielokąt | [(xl.yl)….] |
Okrągłe | 24 bajtów | Okrągłe | <(xy).r> (punkt środkowy i promień) |
Wyliczone typy
Wyliczone PostgreSQL typ danych jest przydatny do reprezentowania rzadko zmieniających się informacji, takich jak kod kraju lub identyfikator oddziału. Wyliczeniowy typ danych jest reprezentowany w tabeli z kluczami obcymi, aby zapewnić integralność danych.
Przykład
Kolor włosów jest dość statyczny w bazie danych demograficznych
CREATE TYPE hair_color AS ENUM ('brown','black','red','grey','blond')
Typ zakresu
Wiele aplikacji biznesowych wymaga danych w zakresach. Zwykle definiuje się dwie kolumny (przykład: data początkowa, data końcowa) w celu obsługi zakresów. Jest to zarówno nieefektywne, jak i trudne w utrzymaniu.
Postgre zbudował typy zakresów w następujący sposób
- int4range — Zakres wyświetlania liczby całkowitej
- int8range — Zakres wyświetlania biginta
- numrange — Pokazuje zakres liczbowy
- tstrange — Pomaga wyświetlić znacznik czasu bez strefy czasowej
- dziwne — umożliwia wyświetlenie znacznika czasu ze strefą czasową
- zakres dat — zakres dat
Typ UUID
Uniwersalnie unikalne identyfikatory (UUID) to 128-bitowa wielkość generowana przez algorytm. Jest bardzo mało prawdopodobne, że ten sam identyfikator zostanie wygenerowany przez inną osobę na świecie przy użyciu tego samego algorytmu. Dlatego w przypadku systemów rozproszonych identyfikatory te są idealnym wyborem, ponieważ zapewniają unikalność w ramach jednej bazy danych. Identyfikator UUID zapisywany jest jako grupa małych cyfr w formacie szesnastkowym, rozdzielonych łącznikami.
PostgreSQL ma natywny typ danych UUID, który zajmuje 16 bajtów pamięci. UUID jest idealnym typem danych dla kluczy podstawowych.
Przykład
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre akceptuje również alternatywne formy danych wejściowych UUID, takie jak wielkie litery, bez łączników, nawiasów klamrowych itp.
Typ XML
PostgreSQL umożliwia przechowywanie danych XML w typie danych, ale jest to nic innego jak rozszerzenie typu danych tekstowych. Zaletą jest jednak to, że sprawdza, czy wejściowy kod XML jest poprawnie sformułowany.
Przykład
XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')
Typ JSON
Do przechowywania danych JSON PostgreSQL oferuje 2 typy danych
- JSON
- JSONB
json | Jsonba |
---|---|
Proste rozszerzenie typu danych tekstowych z walidacją JSON | Binarna reprezentacja danych JSON |
Wstawianie jest szybkie, ale pobieranie danych jest stosunkowo powolne. | Wstawianie jest powolne, ale wybierz (pobieranie danych jest szybkie) |
Zapisuje wprowadzone dane dokładnie w takiej postaci, w jakiej są, łącznie z białymi znakami. | Obsługuje indeksowanie. Może zoptymalizować białe znaki, aby przyspieszyć pobieranie. |
Ponowne przetwarzanie przy pobieraniu danych | Przy pobieraniu danych nie jest wymagane ponowne przetwarzanie |
Najpopularniejszym typem danych JSON był używany przez nas jsonb, chyba że istnieje specjalistyczna potrzeba użycia typu danych JSON.
Przykład
CREATE TABLE employee ( id integer NOT NULL, age integer NOT NULL, data jsonb );
INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboareded": true}');
Pseudotypy
PostgreSQL zawiera wiele wpisów specjalnego przeznaczenia, zwanych pseudotypami. Nie można używać pseudotypów jako PostgreSQL typy kolumn. Służy do deklarowania argumentu lub typu zwracanego przez funkcję.
Każdy z dostępnych pseudotypów jest pomocny w sytuacjach, gdy dokumentacja zachowania funkcji nie odpowiada prostemu przyjęciu lub zwróceniu wartości określonego Typ danych SQL.
Imię | Opis |
---|---|
Każdy | Funkcja akceptuje wszystkie typy danych wejściowych. |
Tablica | Funkcja akceptuje dowolny typ danych tablicowych. |
Dowolny element | Funkcja akceptuje dowolny typ danych. |
Dowolne wyliczenie | Funkcja akceptuje dowolny typ danych wyliczeniowych. |
Brak układu | Funkcja akceptuje dowolny typ danych inny niż tablicowy. |
Ciąg c | Funkcja akceptuje lub zwraca ciąg C zakończony znakiem null. |
Wewnętrzne | Funkcja wewnętrzna akceptuje lub zwraca typ danych wewnętrznych serwera. |
Obsługa_języka | Zadeklarowano zwrócenie procedury obsługi języka. |
Rekord | Znajdź funkcję, która zwraca nieokreślony typ wiersza. |
Cyngiel | Funkcja wyzwalacza służy do zwracania wyzwalacza. |
Ważne jest, aby użytkownik korzystający z tej funkcji upewnił się, że funkcja będzie zachowywać się bezpiecznie, gdy jako argument zostanie użyty pseudotyp.
Najlepsze praktyki przy użyciu typów danych
- Użyj typu danych „tekst”, chyba że chcesz ograniczyć wprowadzane dane
- Nigdy nie używaj „char”.
- Do liczb całkowitych używa się „int”. Używaj bigint tylko wtedy, gdy masz naprawdę duże liczby.
- Prawie zawsze używaj słowa „numeryczny”.
- Użyj pływaka PostgreSQL jeśli masz źródło danych IEEE 754
Podsumowanie
- PostgreSQL oferuje użytkownikom bogaty zestaw natywnych typów danych
- PostgreSQL obsługuje znakowe typy danych do przechowywania wartości tekstowych
- PostgreSQL obsługuje dwa różne typy liczb: 1. Liczby całkowite, 2. Liczby zmiennoprzecinkowe
- Ciąg binarny to sekwencja bajtów lub oktetów
- PostgreSQL ma typ adresu sieciowego, który pomaga zoptymalizować przechowywanie danych sieciowych
- Wyszukiwanie tekstu PostgreSQL Struktury danych są zaprojektowane do obsługi wyszukiwania pełnotekstowego
- Data/godzina Typy danych PSQL umożliwiają podanie daty i godziny w różnych formatach
- Typy pól Boolean Postgres mogą przechowywać trzy wartości 1. Prawda 2. Fałsz 3. Null
- Geometryczne PostgreSQL typy danych reprezentują dwuwymiarowe obiekty przestrzenne
- Wyliczone typy danych w PostgreSQL jest przydatny do reprezentowania rzadko zmieniających się informacji, takich jak kod kraju lub identyfikator oddziału
- Uniwersalnie unikalne identyfikatory (UUID) to 128-bitowa wielkość generowana przez algorytm
- PostgreSQL zawiera wiele wpisów specjalnego przeznaczenia, zwanych pseudotypami
- Najlepszą praktyką jest używanie typu danych „tekst”, chyba że chcesz ograniczyć wprowadzane dane