pg_restore fails when psql succeeds

Started by Cherioover 5 years ago5 messagesgeneral
Jump to latest
#1Cherio
cherio@gmail.com

I am facing a consistent issue with pg_restore when moving databases with
large tables from PostgreSQL 10 to 13. pg_restore fails to restore indexes
on some large tables (anything over 20 million records).

pg_restore: error: could not execute query: ERROR: out of memory
DETAIL: Failed on request of size 214728704 in memory context "TupleSort
sort".
CONTEXT: parallel worker
Command was: CREATE INDEX some_index_idx ON schema1.table1 USING btree
(some_field);

This happens when a database is exported with formats "custom" or
"directory". No errors occur when the same databases are exported as plain
text and imported with psql.

Initially I was importing with --jobs in several threads, but reducing
threads to 1 made no difference. I tried exporting with pg_dump versions 13
and 10. It made no difference either - restore succeeds with plain text +
psql and fails with the other formats + pg_restore.

The same doesn't happen when I import from 10 into 12. I am a bit lost and
concerned at this point about moving on with conversion to version 13.

Any guidance would be greatly appreciated!

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Cherio (#1)
Re: pg_restore fails when psql succeeds

On 12/12/20 12:10 PM, Cherio wrote:

I am facing a consistent issue with pg_restore when moving databases
with large tables from PostgreSQL 10 to 13. pg_restore fails to restore
indexes on some large tables (anything over 20 million records).

pg_restore: error: could not execute query: ERROR:  out of memory
DETAIL:  Failed on request of size 214728704 in memory context
"TupleSort sort".
CONTEXT:  parallel worker
Command was: CREATE INDEX some_index_idx ON schema1.table1 USING btree
(some_field);

This happens when a database is exported with formats "custom" or
"directory". No errors occur when the same databases are exported as
plain text and imported with psql.

Initially I was importing with --jobs in several threads, but reducing
threads to 1 made no difference. I tried exporting with pg_dump versions
13 and 10. It made no difference either - restore succeeds with plain
text + psql and fails with the other formats + pg_restore.

The same doesn't happen when I import from 10 into 12. I am a bit lost
and concerned at this point about moving on with conversion to version 13.

Any guidance would be greatly appreciated!

Exact Postgres 13 version?

Hardware specifications for machine?

Changes in this
section(https://www.postgresql.org/docs/13/runtime-config-resource.html)
of postgresql.conf?

Relevant information from system logs?

--
Adrian Klaver
adrian.klaver@aklaver.com

#3Cherio
cherio@gmail.com
In reply to: Adrian Klaver (#2)
Re: pg_restore fails when psql succeeds

I install PostgreSQL from "apt.postgresql.org" repository:
$ /usr/lib/postgresql/13/bin/postgres --version
postgres (PostgreSQL) 13.1 (Ubuntu 13.1-1.pgdg20.04+1)

It runs in a VM, the most recent & updated version of Ubuntu LTS 20.04
$ uname -a
Linux dbwfprod8-20 5.4.0-56-generic #62-Ubuntu SMP Mon Nov 23 19:20:19 UTC
2020 x86_64 x86_64 x86_64 GNU/Linux
RAM: 48GB
CPU: 8
Storage: 800GB (plenty of free space left)

I attached customizations to postgresql.conf and a few relevant errors from
the PostgreSQL server log; there were no relevant messages in journalctl.

On Sat, Dec 12, 2020 at 3:18 PM Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 12/12/20 12:10 PM, Cherio wrote:

I am facing a consistent issue with pg_restore when moving databases
with large tables from PostgreSQL 10 to 13. pg_restore fails to restore
indexes on some large tables (anything over 20 million records).

pg_restore: error: could not execute query: ERROR: out of memory
DETAIL: Failed on request of size 214728704 in memory context
"TupleSort sort".
CONTEXT: parallel worker
Command was: CREATE INDEX some_index_idx ON schema1.table1 USING btree
(some_field);

This happens when a database is exported with formats "custom" or
"directory". No errors occur when the same databases are exported as
plain text and imported with psql.

Initially I was importing with --jobs in several threads, but reducing
threads to 1 made no difference. I tried exporting with pg_dump versions
13 and 10. It made no difference either - restore succeeds with plain
text + psql and fails with the other formats + pg_restore.

The same doesn't happen when I import from 10 into 12. I am a bit lost
and concerned at this point about moving on with conversion to version

13.

Any guidance would be greatly appreciated!

Exact Postgres 13 version?

Hardware specifications for machine?

Changes in this
section(https://www.postgresql.org/docs/13/runtime-config-resource.html)
of postgresql.conf?

Relevant information from system logs?

--
Adrian Klaver
adrian.klaver@aklaver.com

Attachments:

var-log-postgresql-postgresql-13-main.logapplication/octet-stream; name=var-log-postgresql-postgresql-13-main.logDownload
postgresql-44G.confapplication/octet-stream; name=postgresql-44G.confDownload
#4Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Cherio (#3)
Re: pg_restore fails when psql succeeds

On 12/12/20 12:39 PM, Cherio wrote:

I install PostgreSQL from "apt.postgresql.org
<http://apt.postgresql.org&gt;&quot; repository:
$ /usr/lib/postgresql/13/bin/postgres --version
postgres (PostgreSQL) 13.1 (Ubuntu 13.1-1.pgdg20.04+1)

It runs in a VM, the most recent & updated version of Ubuntu LTS 20.04
$ uname -a
Linux dbwfprod8-20 5.4.0-56-generic #62-Ubuntu SMP Mon Nov 23 19:20:19
UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
RAM: 48GB
CPU: 8
Storage: 800GB (plenty of free space left)

I attached customizations to postgresql.conf and a few relevant errors
from the PostgreSQL server log; there were no relevant messages in
journalctl.

What is the exact command you are using to do the restore?

--
Adrian Klaver
adrian.klaver@aklaver.com

#5Cherio
cherio@gmail.com
In reply to: Adrian Klaver (#4)
Re: pg_restore fails when psql succeeds

The exact command is nothing fancy really. The complete exact command is
below

export PGPASSWORD=xxxxxxxxxxxxxxxxxxx
pg_restore --verbose --no-password --clean --if-exists -h 111.111.111.111
-p 5432 -U user -d blankdbfromstandardtemplate0 /PATH/EXPORTEDDIR 2>&1 |
tee logfile

I was able to import with pg_restore eventually after I disabled huge_pages
on the OS level. Huge pages were initially configured exactly as suggested
here:
https://www.postgresql.org/docs/13/kernel-resources.html#LINUX-HUGE-PAGES.
This is a dedicated postgres DB server machine but I always verify memory
settings to leave a little wiggle room; postgresqltuner.pl report was clear.

On Sun, Dec 13, 2020 at 1:00 PM Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 12/12/20 12:39 PM, Cherio wrote:

I install PostgreSQL from "apt.postgresql.org
<http://apt.postgresql.org&gt;&quot; repository:
$ /usr/lib/postgresql/13/bin/postgres --version
postgres (PostgreSQL) 13.1 (Ubuntu 13.1-1.pgdg20.04+1)

It runs in a VM, the most recent & updated version of Ubuntu LTS 20.04
$ uname -a
Linux dbwfprod8-20 5.4.0-56-generic #62-Ubuntu SMP Mon Nov 23 19:20:19
UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
RAM: 48GB
CPU: 8
Storage: 800GB (plenty of free space left)

I attached customizations to postgresql.conf and a few relevant errors
from the PostgreSQL server log; there were no relevant messages in
journalctl.

What is the exact command you are using to do the restore?

--
Adrian Klaver
adrian.klaver@aklaver.com