Thread: Restoring pg_dump Backup with psql Fails

Restoring pg_dump Backup with psql Fails

From
"Phillip Smith"
Date:
PostgreSQL 8.2.4 on RedHat ES4 64-bit

Hi all,

Doing some works on a database this morning (changing it to take data from
our new ERP system) so naturally I made a backup of the database first:
      pg_dump important_database > ~/backup/important-071229.sql
    chmod 440 ~/backup/important-071229.sql

Of course things have screwed up (fortunately no-one is working today) and I
need to restore:
      psql
    ALTER DATABASE important_database RENAME TO
important_database071229;
    CREATE DATABASE important_database;
    \q

    psql important_database < ~/backup/important-071229.sql

But I get a whole bunch of errors, for example:
<snip>
ERROR:  syntax error at or near "all"
LINE 1: all orders over $400.00 - freight free Order 10 of any produ...
        ^
ERROR:  syntax error at or near "If"
LINE 1: If stores spend over $300.00 they will receive a 5% discount...
<snip>
invalid command \.
invalid command \.
invalid command \N
invalid command \N
<snip>

Both psql and pg_dump are the correct versions:
    [postgres@stirling ~]$ ls -lh `which pg_dump`
    lrwxrwxrwx  1 root root 31 Jul 25 11:51 /usr/local/bin/pg_dump ->
/usr/local/pg-8.2.4/bin/pg_dump
    [postgres@stirling ~]$ ls -lh `which psql`
    lrwxrwxrwx  1 root root 28 Jul 25 11:51 /usr/local/bin/psql ->
/usr/local/pg-8.2.4/bin/psql
(I compile each new version of Postgres to it's own folder and data dir:
/usr/local/pg-<version>/ and /home/Postgres/pgData-<version> )

What am I doing wrong?

Cheers,
~p

Phillip Smith
IT Coordinator
Weatherbeeta P/L
8 Moncrief Rd
Nunawading, VIC, 3131
AUSTRALIA


THINK BEFORE YOU PRINT - Save paper if you don't really need to print this

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to
the addressee.  If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy
or deliver this message to anyone, and you should destroy it and kindly
notify the sender by reply email.

Information in this message that does not relate to the official business
of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments
e-mail.

Re: Restoring pg_dump Backup with psql Fails

From
Tom Lane
Date:
"Phillip Smith" <phillip.smith@weatherbeeta.com.au> writes:
> But I get a whole bunch of errors, for example:
> <snip>
> ERROR:  syntax error at or near "all"
> LINE 1: all orders over $400.00 - freight free Order 10 of any produ...
>         ^

Please show us the *first* few errors, not some randomly chosen ones.
The above looks like a COPY has failed and psql has started thinking
that copy-data lines are commands, but how or why that happened is
not in evidence.

            regards, tom lane

Re: Restoring pg_dump Backup with psql Fails

From
"Phillip Smith"
Date:
Sorry Tom - I should know better :)

I've attached the first 512 lines of the output from psql. The whole output
is 3mb.

Cheers,
~p

> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: Saturday, 29 December 2007 13:26
> To: Phillip Smith
> Cc: pgsql-admin@postgresql.org
> Subject: Re: [ADMIN] Restoring pg_dump Backup with psql Fails
>
> "Phillip Smith" <phillip.smith@weatherbeeta.com.au> writes:
> > But I get a whole bunch of errors, for example:
> > <snip>
> > ERROR:  syntax error at or near "all"
> > LINE 1: all orders over $400.00 - freight free Order 10 of any produ...
> >         ^
>
> Please show us the *first* few errors, not some randomly chosen ones.
> The above looks like a COPY has failed and psql has started thinking
> that copy-data lines are commands, but how or why that happened is
> not in evidence.
>
>             regards, tom lane


THINK BEFORE YOU PRINT - Save paper if you don't really need to print this

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to
the addressee.  If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy
or deliver this message to anyone, and you should destroy it and kindly
notify the sender by reply email.

Information in this message that does not relate to the official business
of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments
e-mail.

Attachment

Re: Restoring pg_dump Backup with psql Fails

From
"Joshua D. Drake"
Date:
Phillip Smith wrote:
> Sorry Tom - I should know better :)
>
> I've attached the first 512 lines of the output from psql. The whole output
> is 3mb.
>

You have several problems in this dump. One it appears that some of the
releations already exist. Did you by chance accidently create stuff
within template1 at some point?

Secondly you need to look into iconv to fix your invalid UTF8 data.

Joshua D. Drake

> Cheers,
> ~p
>
>> -----Original Message-----
>> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
>> Sent: Saturday, 29 December 2007 13:26
>> To: Phillip Smith
>> Cc: pgsql-admin@postgresql.org
>> Subject: Re: [ADMIN] Restoring pg_dump Backup with psql Fails
>>
>> "Phillip Smith" <phillip.smith@weatherbeeta.com.au> writes:
>>> But I get a whole bunch of errors, for example:
>>> <snip>
>>> ERROR:  syntax error at or near "all"
>>> LINE 1: all orders over $400.00 - freight free Order 10 of any produ...
>>>         ^
>> Please show us the *first* few errors, not some randomly chosen ones.
>> The above looks like a COPY has failed and psql has started thinking
>> that copy-data lines are commands, but how or why that happened is
>> not in evidence.
>>
>>             regards, tom lane
>
>
> THINK BEFORE YOU PRINT - Save paper if you don't really need to print this
>
> *******************Confidentiality and Privilege Notice*******************
>
> The material contained in this message is privileged and confidential to
> the addressee.  If you are not the addressee indicated in this message or
> responsible for delivery of the message to such person, you may not copy
> or deliver this message to anyone, and you should destroy it and kindly
> notify the sender by reply email.
>
> Information in this message that does not relate to the official business
> of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
> Weatherbeeta, its employees, contractors or associates shall not be liable
> for direct, indirect or consequential loss arising from transmission of this
> message or any attachments
> e-mail.
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faq


Re: Restoring pg_dump Backup with psql Fails

From
Tom Lane
Date:
"Phillip Smith" <phillip.smith@weatherbeeta.com.au> writes:
> I've attached the first 512 lines of the output from psql. The whole output
> is 3mb.

Hmm, these are a bit troubling:

> ERROR:  relation "grps" already exists
> ...
> ERROR:  relation "stock" already exists

because you claimed you were restoring into an empty database ---
either you're mistaken or there is an interesting bug in pg_dump.
Please look into that more closely.

It's hard to be entirely certain, but the subsequent errors seem to
mostly flow from having pre-existing tables "grps" and "stock" that
don't match what the dump script is expecting.

There seems to be a separate encoding problem too:

> ERROR:  invalid byte sequence for encoding "UTF8": 0x96
> HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is
controlledby "client_encoding". 
> CONTEXT:  COPY dwh_cust, line 7413
> ERROR:  invalid byte sequence for encoding "UTF8": 0xe86d65
> HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is
controlledby "client_encoding". 
> CONTEXT:  COPY dwh_stk, line 323461

You didn't mention what PG version you are dumping from, but I'm
thinking it was one that wasn't very strict about encoding correctness.
You may need to clean up the dump file with iconv or some similar tool
--- look through the PG archives for lots of previous discussions about
that.

            regards, tom lane

Re: Restoring pg_dump Backup with psql Fails

From
"Phillip Smith"
Date:
> You have several problems in this dump. One it appears that some of the
> releations already exist. Did you by chance accidently create stuff
> within template1 at some point?

I think I've found my problem:
[postgres@stirling backups]$ psql template1
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.
template1=# \d
            List of relations
 Schema |     Name     | Type  |  Owner
--------+--------------+-------+----------
 public | buyers       | table | postgres
 public | creditors    | table | postgres
 public | debtors      | table | postgres
 public | grps         | table | postgres
 public | po           | table | postgres
 public | sales_orders | table | postgres
 public | stkmvt       | table | postgres
 public | stock        | table | postgres
 public | sys          | table | postgres
(9 rows)

template1=#

I don't know how or when those tables were created in template1 - they're
certainly not supposed to be there or needed. Is it safe to just DROP the
tables from template1?

> Secondly you need to look into iconv to fix your invalid UTF8 data.
My bad - the old database was using SQL_ASCII encoding, but when I recreated
it I let it default to UTF8.

Re-created it again with SQL_ASCII encoding, which didn't copy the tables
from template1 and now the restore seems to be going OK :)


THINK BEFORE YOU PRINT - Save paper if you don't really need to print this

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to
the addressee.  If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy
or deliver this message to anyone, and you should destroy it and kindly
notify the sender by reply email.

Information in this message that does not relate to the official business
of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments
e-mail.

Re: Restoring pg_dump Backup with psql Fails

From
Tom Lane
Date:
"Phillip Smith" <phillip.smith@weatherbeeta.com.au> writes:
> I think I've found my problem:
> I don't know how or when those tables were created in template1 - they're
> certainly not supposed to be there or needed. Is it safe to just DROP the
> tables from template1?

Yeah, but what other user-created stuff (functions for instance) might
be in there?

You might want to drop template1 and recreate it from template0.
(There's a blow-by-blow article about doing that on techdocs, IIRC.)

            regards, tom lane

Re: Restoring pg_dump Backup with psql Fails

From
"Phillip Smith"
Date:
> Yeah, but what other user-created stuff (functions for instance) might
> be in there?
> You might want to drop template1 and recreate it from template0.
> (There's a blow-by-blow article about doing that on techdocs, IIRC.)

I think I'll do that :)
Thanks Tom & Joshua - you've been most helpful as always,
~p


THINK BEFORE YOU PRINT - Save paper if you don't really need to print this

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to
the addressee.  If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy
or deliver this message to anyone, and you should destroy it and kindly
notify the sender by reply email.

Information in this message that does not relate to the official business
of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments
e-mail.