Fórum Root.cz

Hlavní témata => Server => Téma založeno: acerimmer 22. 03. 2023, 14:58:38

Název: PostgreSQL: velikost textového sloupečku v bajtech
Přispěvatel: acerimmer 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.
Název: Re:Postgres - velikost text sloupecku v bytech
Přispěvatel: Filip Jirsák 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).
Název: Re:Postgres - velikost text sloupecku v bytech
Přispěvatel: Petr Ledvina 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.
Název: Re:PostgreSQL: velikost textového sloupečku v bajtech
Přispěvatel: acerimmer 23. 03. 2023, 14:29:26
Nechapu jak jsem mohl octet_length prehlednout, diky 8)