Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors - Mailing list pgsql-general

From raf
Subject Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors
Date
Msg-id ZtfEsfn1HaxQyy2x@raf.org
Whole thread Raw
In response to Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors
List pgsql-general
On Tue, Sep 03, 2024 at 06:43:22PM -0700, "David G. Johnston" <david.g.johnston@gmail.com> wrote:

> On Tuesday, September 3, 2024, raf <postgres@raf.org> wrote:
> 
> > Hi,
> >
> > I need help!
> >
> > I'm upgrading an ancient (but still awesome) postgresql-9.6.24 (via
> > EnterpriseDB)
> > to (a no doubt even more awesome) postgresql-15.8 (via debian (stable)
> > packages)
> > but am unable to load database backups that were encrypted via gpg.
> > Loading from
> > unencrypted backups works fine (and the millions of tests all pass! Yay!).
> >
> > I have a convenience program for handling loading called "load"
> > and the underlying commands that it executes look like this:
> >
> >   dropdb -h payroll -p 5433 -U postgres payroll_tst
> >   createdb -h payroll -p 5433 -U postgres -T template0 -E utf8 -O admin
> > payroll_tst
> 
> Given the following command
> 
> >   gpg --decrypt 20240904-011254-payroll_tst.pgdump.gpg.aps24 | pg_restore
> > -1 -h payroll -p 5433 -U postgres -d payroll_tst -Fc
> 
> And this error
> 
> >   pg_restore: [archiver (db)] could not execute query: ERROR:  could not
> > find function "xml_is_well_formed" in file "/usr/lib/postgresql/15/lib/
> > pgxml.so"
> >       Command was: CREATE FUNCTION public.xml_is_well_formed(text)
> > RETURNS boolean
> >       LANGUAGE c IMMUTABLE STRICT
> >       AS '$libdir/pgxml', 'xml...
> 
> This should be expected.  In particular…
> 
> >   gpg: error writing to '-': Broken pipe
> >   gpg: error flushing '[stdout]': Broken pipe
> >   gpg: handle plaintext failed: Broken pipe
> >   pgrestore encountered errors
> >
> > I'm not worried about the xml_is_well_formed error (or the xml_valid
> > error that would happen next). I think those functions are ancient
> > and irrelevant and not in use, and I'm happy for pg_restore to
> > continue, like it does when gpg is not involved.
> 
> You specified “-1” so I don’t get why you believe pg_restore should be
> continuing to execute in the face of the SQL error.

The reason I believe pg_restore should be continuing to execute in the face of
the SQL error is because I didn't supply the -e option which is described
thusly in the pg_restore manual entry:

 -e
 --exit-on-error
     Exit if an error is encountered while sending SQL commands to the database.
     The default is to continue and to display a count of errors at the end of
     the restoration.

So, since I didn't specify the -e option, pg_restore should continue to
execute, and not close stdin. As I explained, when restoring from a file on
disk, the pg_restore command does continue and work fine. It's only when
restoring from stdin that I'm seeing this problem.

Ah, I see. The manual entry also says that -1 implies -e.

And when reading from a file on disk, my load script doesn't include -1.
Instead, it uses the -j option. Now it all makes sense.

Many thanks. It's working without the -1. I'll change the load
script so that it only uses the -1 option when restoring from
new backups taken after the upgrade to 15.8 (where these vestigial
xml functions won't be present in the backup).

> David J.

cheers,
raf




pgsql-general by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors
Next
From: Tom Lane
Date:
Subject: Re: Help with "gpg -d ... | pg_restore ..." with unimportant pg_restore errors