Sorry I was not remembering the details. Probably there is a TOC in your dump 
file, but it does not contain any positions for the data. The pg_restore 
command has to scan the whole file in advance, and fill in the TOC offsets in 
memory.

This scanning happens in a very inefficient way, with many seek calls and small 
block reads. Try strace to see them. This initial phase can take hours in a 
huge dump file, before even starting any actual restoration.

Thank you for testing.
Dimitris 

On 30 August 2025 20:19:13 CEST, Adrian Klaver <adrian.kla...@aklaver.com> 
wrote:
>On 8/27/25 09:10, Dimitrios Apostolou wrote:
>> 
>> On Wednesday 2025-08-27 17:25, Adrian Klaver wrote:
>
>
>>> 
>>> For completeness and just in case they may affect the output what do the 
>>> patches do?
>> 
>> Two patches for speeding up scanning an archive without TOC, like the one 
>> I'm having (because it is piped into borg, instead of written to file). 
>> These were activated, but shouldn't matter. They only build the TOC in 
>> pg_restore's memory.
>
>Are you sure about that?
>
>I just did:
>
>pg_dump -Fc --compress=none --no-toast-compression -d test -U postgres | borg 
>create --stats --stdin-name pg_file  --stdin-user aklaver --stdin-group 
>aklaver borg_test/::PgTest -
>
>Then:
>
>borg mount borg_test/ mnt_tmp/
>cd mnt_tmp/PgTest/
>
>and then:
>
>pg_restore -l pg_file
>
>and I got a TOC.
>
>Or are you streaming the data out of the Borg archive?
>
>> 
>> https://commitfest.postgresql.org/patch/5809/
>> https://commitfest.postgresql.org/patch/5817/
>> 
>> And two patches for speeding up pg_restore like mentioned above, under 
>> specific arguments that I didn't provide. (one speedup needs --clean, and 
>> the other needs --freeze).
>> 
>> https://commitfest.postgresql.org/patch/5821/
>> https://commitfest.postgresql.org/patch/5826/
>> 
>> IIRC I did not activate them (via --clean) because TRUNCATE fails when 
>> foreign keys exist. See the discussion threads.
>> 
>> 
>> Dimitris
>
>


Reply via email to