4 ms·
There's also "char", with quotes, as a special type. It's always 1 byte. The other types have overhead. A single-byte bytea will actually use 2 bytes, char(1)
by FreakLegion 2y ago
There's also "char", with quotes, as a special type. It's always 1 byte.
The other types have overhead. A single-byte bytea will actually use 2 bytes, char(1) will use at least that much, and bit(8) will use 7 bytes. Smallint is strictly better for representing small numbers.
- Volundr 2y agoTIL: https://www.postgresql.org/docs/17/datatype-character.html https://www.postgresql.org/docs/17/datatype-character.html (it's in the table at the bottom). I'd still be suspicious of using it, and the docs recommend against it, but it exists.
- FreakLegion 2y agoA good reason not to use it is that 49::"char"::int == 49, but 49::"char"::smallint == 1. In other words, int casts directly interpret the value as an integer, but smallint (and bigint) casts interpret it as an ASCII character, '1', which they then convert to the integer 1.