Dzisiaj trochę pogadamy o tablicach — jednym z mocniejszych narzędzi PostgreSQL, które pozwala trzymać listę wartości jednego typu w jednej kolumnie. Bardziej szczegółowo ogarniemy tablice na kolejnych poziomach.
Kiedy ktoś mówi "tablice", od razu przychodzą na myśl listy. Pomyśl, jak zapisujesz listę zakupów przed wyjściem do sklepu: jabłka, banany, mleko, chleb. W PostgreSQL tablica to taki odpowiednik tej listy, gdzie możesz trzymać kilka wartości w jednym polu, przy czym każda wartość ma ten sam typ danych. Na przykład tablica liczb, tablica tekstów, tablica dat itd.
Podajmy kilka przykładów.
Tablica liczb:
{1, 2, 3, 4}
Tablica stringów:
{"apple", "banana", "cherry"}
Tablica dat:
{2024-10-01, 2024-10-02, 2024-10-03}
Tablica pozwala zapisywać wiele wartości w jednym polu, oszczędzając miejsce w tabeli i zwiększając elastyczność zapytań.
Po co są tablice? Główne zalety
Kompaktowe przechowywanie danych: trzymanie kilku wartości w jednym polu. To szczególnie przydatne dla danych, które są logicznie powiązane. Na przykład lista tagów do artykułu albo lista ocen studenta. Tworzyć osobną tabelę dla kilku tagów?
Wygoda pobierania: tablice pozwalają od razu pobrać całą listę wartości z jednego pola, a także łatwo manipulować pojedynczymi elementami tablicy.
Wydajność: w niektórych przypadkach tablice pozwalają uniknąć tworzenia dodatkowych tabel dla powiązanych danych, co może uprościć architekturę bazy i przyspieszyć development. I to jest spoko.
Jak pracować z tablicami w PostgreSQL?
Tworzenie tablicy w SELECT
Do zadania tablicy możesz użyć konstruktora ARRAY[]. Oto przykład:
-- Przykład tablicy liczb
SELECT ARRAY[1, 2, 3, 4];
-- Przykład tablicy stringów
SELECT ARRAY['apple', 'banana', 'cherry'];
Za proste. Stwórzmy tabelę i spróbujmy coś z niej wyciągnąć.
Tworzenie tabeli z tablicami
Na początek stwórzmy tabelę, gdzie jedna z kolumn będzie tablicą.
| id | name - VARCHAR(50) | subjects - TEXT[] |
|---|---|---|
| 1 | Alex | {Matematyka,Fizyka} |
| 2 | Maria | {Chemia,Biologia,Angielski} |
| 3 | Peter | {Informatyka} |
Zobaczmy, co nam wyszło:
SELECT * FROM students;
| id | name | subjects |
|---|---|---|
| 1 | Alex | {Matematyka,Fizyka} |
| 2 | Maria | {Chemia,Biologia,Angielski} |
| 3 | Peter | {Informatyka} |
Wyciąganie danych z tablic
Do wyciągania danych z tablicy PostgreSQL daje kilka funkcji i operatorów.
Wyciąganie elementu tablicy
Żeby dostać element tablicy po indeksie, używasz nawiasów kwadratowych []. Uwaga: numeracja zaczyna się od 1 (a nie od 0 jak w większości języków programowania).
-- Pobieramy pierwszy przedmiot każdego studenta
SELECT name, subjects[1] AS pierwszy_przedmiot FROM students;
I taki mamy wynik:
| name | pierwszy_przedmiot |
|---|---|
| Alex | Matematyka |
| Maria | Chemia |
| Peter | Informatyka |
Wyciąganie całego wiersza tablicy
Żeby dostać wszystkie elementy tablicy, używasz zwykłego SELECT:
SELECT name, subjects FROM students;
Szukajka wartości w tablicy
Czasem trzeba sprawdzić, czy tablica zawiera konkretną wartość. Do tego jest operator ANY.
-- Wybierz studentów, którzy uczą się "Matematyka"
SELECT name
FROM students
WHERE 'Matematyka' = ANY(subjects);
Wynik zapytania:
| name |
|---|
| Alex |
W PostgresQL jest masa funkcji i operatorów do pracy z tablicami, ale o tym pogadamy na kolejnych poziomach :P
Typowe błędy przy pracy z tablicami
Mieszanie indeksowania od 0 i od 1.
W PostgreSQL indeksowanie tablicy zaczyna się od 1. Jeśli jesteś przyzwyczajony do języków jak Python czy JavaScript, łatwo się pomylić.
Puste tablice.
Pusta tablica {} i NULL — to nie to samo w PostgreSQL. Jeśli porównujesz tablice, nie myl tych pojęć.
Praca z dużymi tablicami.
Trzymanie ogromnej ilości danych w tablicy może wydłużyć czas przetwarzania zapytań. Używaj tablic do niewielkich ilości danych.
GO TO FULL VERSION