Обсуждение: Binary difference in pg_internal.init after running pg_initdbmultiple times

Поиск
Список
Период
Сортировка

Binary difference in pg_internal.init after running pg_initdbmultiple times

От
"samuel.coulee"
Дата:
Hi,

In the PG source code function "write_relcache_init_file()", I found that
the whole 'Relation' structs were directly written into the file
'pg_internal.init'. This brings some binary differences of that file,  if we
run pg_initdb multiple times, because the struct 'Relation' contains some
pointer fields.

And my question is : Could we clear the pointer values in 'Relation' before
calling write_item(...)?

No benefit regarding function or performance, just for binary
compatibility... 
Thanks for reading. 




--
Sent from: http://www.postgresql-archive.org/PostgreSQL-hackers-f1928748.html


Re: Binary difference in pg_internal.init after running pg_initdbmultiple times

От
Tomas Vondra
Дата:
On 07/12/2018 10:08 AM, samuel.coulee wrote:
> Hi,
> 
> In the PG source code function "write_relcache_init_file()", I found that
> the whole 'Relation' structs were directly written into the file
> 'pg_internal.init'. This brings some binary differences of that file,  if we
> run pg_initdb multiple times, because the struct 'Relation' contains some
> pointer fields.
> 
> And my question is : Could we clear the pointer values in 'Relation' before
> calling write_item(...)?
> 
> No benefit regarding function or performance, just for binary
> compatibility...

Binary compatibility with what? Can you describe a scenario where this 
actually matters?

regards

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Re: Binary difference in pg_internal.init after running pg_initdb multiple times

От
Tom Lane
Дата:
"samuel.coulee" <313914592@qq.com> writes:
> In the PG source code function "write_relcache_init_file()", I found that
> the whole 'Relation' structs were directly written into the file
> 'pg_internal.init'. This brings some binary differences of that file,  if we
> run pg_initdb multiple times, because the struct 'Relation' contains some
> pointer fields.

There's never been any expectation that that file is bitwise-reproducible.
The order of entries is arbitrary, there are probably alignment padding
bytes that contain garbage, etc etc.  So I'm not buying into your apparent
goal here.

> And my question is : Could we clear the pointer values in 'Relation' before
> calling write_item(...)?

No; that's live data with no backup copy.  Conceivably we could copy the
structure and zero out useless fields before writing from the copy, but
that adds code, cycles, maintenance effort, and risk of bugs.

            regards, tom lane