Thread: Binary difference in pg_internal.init after running pg_initdbmultiple times
Binary difference in pg_internal.init after running pg_initdbmultiple times
From
"samuel.coulee"
Date:
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
From
Tomas Vondra
Date:
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
From
Tom Lane
Date:
"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