Re: Postgres do not support tinyint?

2025-01-10 Thread Vladlen Popolitov

Dominique Devienne писал(а) 2025-01-10 16:41:

On Fri, Jan 10, 2025 at 10:13 AM Vladlen Popolitov
 wrote:

If you really need 1-byte integer, you can use "char" type. Cast it
to/from int. See comment at the end of the page
https://www.postgresql.org/docs/17/datatype-character.html


Hi. What would be the best online doc to learn about the physical
storage / format for rows/pages/btree, etc... To understand alignment,
packing, varint or not, all those things. I'm quite familiar with the
[SQLite format][1], having read that doc dozens of times, and I'd like
a better low-level understanding for PostgreSQL as well. TIA, --DD

[1]: https://www.sqlite.org/fileformat.html


I would recommend "PostgreSQL Internals" of Egor Rogov (Chapter 3 about 
tuples,

other chapters also great)
Free download from https://postgrespro.com/community/books/internals

Also PostgreSQL source code is officially the part of the documentation.
It is not joke. PostgreSQL source has clear comments in functions code
and in structure declarations. You can compare with other sources, it is 
hard to find better

comments made with love.

Heap tuple information is in source file 
src/include/access/htup_details.h (HeapTupleHeaderData
structure), but I recommend to read above book first, it simplier 
explains many

internal concepts.
--
Best regards,

Vladlen Popolitov.




Re: Postgres do not support tinyint?

2025-01-10 Thread Vladlen Popolitov

Igor Korot писал(а) 2025-01-09 02:40:

Hi, Christopphe,

On Wed, Jan 8, 2025 at 1:34 PM Christophe Pettus  
wrote:




> On Jan 8, 2025, at 11:30, Igor Korot  wrote:
> There is no boolean - it is 0-4 inclusive.

Unless you have somehow gotten PostgreSQL running on an IBM 7070, the 
range 0-4 can be represented by three binary digits, aka booleans. :-)


The only booleans I know of are 0 and 1. ;-)



To be serious, though, the situation is:

1. If there are just one or two tinyints, having a tinyint type 
wouldn't save any space in the row.


No it is not a lot of them.
So then "smallint" is the best bet, right?

Thank you

2. If there are a lot of them, it's worth encoding them into a 
bitstring.


Hi!
If you really need 1-byte integer, you can use "char" type. Cast it 
to/from int.
See comment at the end of the page 
https://www.postgresql.org/docs/17/datatype-character.html


--
Best regards,

Vladlen Popolitov.