Postgres VARCHAR vs TEXT

Ú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:
  1. Otevřít Ovládací panely
  2. Otevřít Nástroje pro správu
  3. Otevřít Služby
  4. Najít službu PostgreSQL Server
  5. 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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.