Thread: Explanation of pg_column_size
Hi all,
Can someone please explain the following to me:
mse=# with l as (select 0.1::numeric as numlit) select pg_column_size(numlit) as sz_numlit, pg_column_size(0.1::numeric) as sz_expr from l;
sz_numlit | sz_expr
-----------+---------
5 | 8
(1 row)
It looks as though the expression is being cast to double precision, but maybe it is invalid to use pg_column_size in this way.
I'm using 9.5.3 on OS X.
Thanks,
Steve
Steve Baldwin <steve.baldwin@gmail.com> writes: > Can someone please explain the following to me: > mse=# with l as (select 0.1::numeric as numlit) select > pg_column_size(numlit) as sz_numlit, pg_column_size(0.1::numeric) as > sz_expr from l; > sz_numlit | sz_expr > -----------+--------- > 5 | 8 > (1 row) I think the first case is putting the value into a tuple, which will cause it to be trimmed to short-header form (1 length byte, 4 payload bytes). In the other case you're looking at a raw numeric_in result, which will be in the default 4-byte-length-word format (plus the same 4 payload bytes). The former would be a more accurate representation of how big this specific value would be on-disk. regards, tom lane