Úvod
Pracujete-li s PostgreSQL, je důležité dobře znát různé datové typy, abyste mohli při vytváření databázových tabulek zvolit ty správné. Dva běžné znakové typy používané v PostgreSQL jsou typy TEXT a VARCHAR. Ačkoli je mezi těmito dvěma typy mnoho podobností, existují také některé klíčové rozdíly. V tomto článku se o těchto typech znaků dozvíme více a porovnáme rozdíly mezi Postgres VARCHAR vs TEXT.
Předpoklady
Než budeme pokračovat v našem porovnávání Postgres VARCHAR vs TEXT, zastavme se u několika předpokladů, které jsou nutné pro postup podle příkladů v tomto článku:
- Ujistěte se, že server PostgreSQL byl správně nainstalován a nakonfigurován. Služba musí být spuštěna na pozadí.
Uživatelé systémů Linux a Windows si mohou PostgreSQL stáhnout zde:
- Pro spuštění serveru PostgreSQL v prostředí Linux použijte následující příkaz:
1
|
sudo service postgresql start
|
- Zda služba běží, můžete zjistit pomocí níže uvedeného příkazu:
1
|
service postgresql status
|
Výstup tohoto příkazu bude vypadat takto:
1
2 3 4 5 6 7 8 9 |
â— postgresql.service – PostgreSQL RDBMS
Naloženo: načteno (/lib/systemd/system/postgresql.service; povoleno; vendor prese Aktivní: aktivní (ukončeno) od čt 2019-08-01 14:51:20 PST; před 36min Proces: 1230 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 1230 (code=exited, status=0/SUCCESS) Aug 01 14:51:20 user-UX330UAK systemd: Aug 01 14:51:20 user-UX330UAK systemd: Spuštěn PostgreSQL RDBMS. řádky 1-8/8 (END) |
- Pracujete-li na počítači se systémem Windows, můžete ke spuštění, zastavení a restartování serveru PostgreSQL použít následující pokyny:
- Otevřít Ovládací panely
- Otevřít Nástroje pro správu
- Otevřít Služby
- Najít službu PostgreSQL Server
- Nakonec službu spustit, zastavit nebo restartovat
Jaké jsou typy znaků PostgreSQL?
V systému PostgreSQL existují tři typy znaků: character(n)
, který je běžně známý jako char(n)
, character varying(n)
, který je běžně známý jako varchar(n)
, a text
. Hodnota n
musí být u těchto typů kladné celé číslo. Všechny znakové typy PostgreSQL jsou schopny ukládat řetězce až do n znaků.
Pokusíte-li se do sloupce tohoto znakového typu PostgreSQL uložit delší řetězec, dojde k chybě, pokud znaky přesahující limit nejsou tvořeny výhradně mezerami. V takovém případě bude překračující řetězec nebo znaky zkráceny na povolenou maximální délku.
Datový typ VARCHAR
se chová podobně jako datový typ TEXT
, pokud není zadána hodnota n. V takovém případě bude řetězec nebo znaky zkráceny na povolenou maximální délku. Výkon obou znakových typů je také podobný, pokud je hodnota n vynechána.
Na rozdíl od jiných databází se znakové typy PostgreSQL mezi sebou výkonnostně neliší. Většinu času budeme používat TEXT
nebo VARCHAR
v závislosti na našich potřebách; VARCHAR(n)
použijeme, když chceme, aby PostgreSQL prováděla kontrolu délkových limitů.
Příklady použití znakových typů PostgreSQL
V tomto příkladu budeme pokračovat v našem srovnání Postgres VARCHAR vs TEXT a podíváme se blíže na znakové typy a jejich fungování v databázi PostgreSQL.
Než budeme moci pokračovat v našich příkladech, budeme muset vytvořit tabulku:
1
2 3 4 5 |
CREATE TABLE pgsql_char_sample (
id serial PRIMARY KEY, my_char VARCHAR (8), my_text TEXT ); |
Po vytvoření naší tabulky můžeme provést operaci vložení:
1
2 3 4 5 6 |
INSERT INTO pgsql_char_sample (my_char, my_text)
VALUES ( „Tento ukázkový řetězec je pro sloupec varchar“, „Tento ukázkový řetězec je pro textový sloupec, který má být vložen do tabulky PostgreSQL“ ); |
Výše uvedený příkaz povede k chybě:
1
|
CHYBA: VALUE too long FOR TYPE CHARACTER VARYING(8)
|
Tato chyba nastala, protože jsme se pokusili vložit řetězec o více než osmi znacích do sloupce my_char
, který má datový typ varchar(8).
Pokusíme se vložit ukázková data znovu, tentokrát s jinými hodnotami:
1
2 3 4 5 6 |
INSERT INTO pgsql_char_sample (my_char, my_text)
VALUES ( „String“, „Tento ukázkový řetězec je určen pro textový sloupec, který má být vložen do tabulky PostgreSQL“ ); |
Pro ověření, že naše operace vložení proběhla úspěšně, můžeme použít následující příkaz:
1
|
SELECT * FROM pgsql_char_sample;
|
Výsledek by měl vypadat asi takto:
1
2 3 4 |
id | my_char | my_text
—-+———+———————————————————————————- 1 | String | Tento ukázkový řetězec JE URČEN pro textový sloupec, který má být vložen do tabulky PostgreSQL TABLE (1 ŘÁDEK) |
V příkladu, na který jsme se podívali, vidíme, že jediný rozdíl mezi sloupci VARCHAR(n)
a TEXT
je ten, že proti sloupci VARCHAR
lze nastavit limit. V tomto případě jsme nastavili VARCHAR na délku osmi znaků, takže řetězce delší délky nelze vložit. Jak jsme již zmínili, znakové typy VARCHAR a TEXT nemají žádné pozorovatelné rozdíly ve výkonu.
Závěr
Při ukládání znakových dat v PostgreSQL je důležité zvolit správný datový typ pro každý sloupec v tabulce. V tomto článku jsme porovnali znakové typy Postgres VARCHAR vs. TEXT a probrali jejich základní podobnosti a rozdíly. Díky informacím uvedeným v tomto článku budete připraveni navrhnout vlastní databázové tabulky v PostgreSQL a zvolit správné datové typy pro své potřeby.