PostgreSQL: velikost textového sloupečku v bajtech

PostgreSQL: velikost textového sloupečku v bajtech
« kdy: 22. 03. 2023, 14:58:38 »
V DB (Postgres) mam tabulku se sloupeckem typu 'text'. Ve sloupecku ukladam 'nahodny' text, kazda radka tabulky ma ruzny obsah tohoto sloupecku. Chci zjistit velikost daneho 'text' sloupecku v bytech pro vsechny radky. Funkce length() mi vrati u sloupecku typu 'text' pocet znaku, ja ale chci vedet kolik pameti znaky zabiraji. Muzu predpokladat ze 1 znak je priblizne 1 byte nebo je to treba prepocitat? A je na toto nejaka standardni funkce v Postgresu? Doufam ze to neni blby dotaz, ale nedari se mi nic najit.
« Poslední změna: 22. 03. 2023, 15:49:47 od Petr Krčmář »


Re:Postgres - velikost text sloupecku v bytech
« Odpověď #1 kdy: 22. 03. 2023, 15:13:43 »
Záleží na kódování znaků. Existují jednobajtová kódování znaků, jde jeden znak = jeden bajt – třeba ISO-859-2, Windows-1250 (pro české texty), ISO-8859-1 (pro západoevropsé jazyky). Existují kódování, kde jeden znak = jeden až čtyři bajty – třeba kódování UTF-8. Znaky anglické abecedy jsou dlouhé 1 bajt, české znaky s diakritikou jsou dvoubajtové, nějaké emoji znaky mohou mít čtyř bajty. Jsou kódování, kde jeden znak jsou vždy dva bajty – třeba UCS-2, do kterého ale nejde uložit plný Unicode, jenom jeho podmnožina (ve které ale jsou všechny české znaky).

Délku textu v bajtech vrací funkce octet_length(). Počítá délku textu v kódování serveru (což je asi to, co chcete).

Re:Postgres - velikost text sloupecku v bytech
« Odpověď #2 kdy: 22. 03. 2023, 15:31:23 »
Ještě by tě mohlo zajímat pg_column_size - vrátí skutečnou velikost, kterou DB potřebuje k uložení dané hodnoty.

Re:PostgreSQL: velikost textového sloupečku v bajtech
« Odpověď #3 kdy: 23. 03. 2023, 14:29:26 »
Nechapu jak jsem mohl octet_length prehlednout, diky 8)