Обсуждение: PostgreSQL 8.2beta1 w/ VALUES

Поиск
Список
Период
Сортировка

PostgreSQL 8.2beta1 w/ VALUES

От
Stephen Frost
Дата:
Greetings,
 Was just playing with 8.2beta1 and importing some data from MySQL and found something rather annoying.  Not *100%*
surethe best way to deal with this, if there even is a way, but...
 
 When loading a rather large data set I started getting errors along these lines:

psql:/home/sfrost/school/cs750/reality/dump-anonymized.postgres.sql:262:
WARNING:  nonstandard use of escape in a string literal
LINE 1: ...XXXXXXXXXX 9999,9:9:999'),(99999,'000000000000',0,'XXXXX XXX...
             ^
 
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
psql:/home/sfrost/school/cs750/reality/dump-anonymized.postgres.sql:262:
WARNING:  nonstandard use of escape in a string literal
LINE 1: ...9999999999',0,',9:9:999'),(99999,'000000000000',0,'XXXX XXXX...
             ^
 
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
INSERT 0 20795
cs750=#
 Which, by themselves, aren't really an issue *except* for the fact that I got an *insane* number of them.  I don't
thinkit was quite one for every row (of which there were 20,795, you'll note) but it was more than enough to drive me
insane. Additionally, cancel requests were ignored.  It's possible this was because of network lag and the server had
alreadyprocessed the request but I'm not sure that was the only reason.  I know I held down ctrl-c for quite a while
duringthe spew of messages...
 
 Anyhow, don't know if there's really a good solution but it'd be nice to only get one warning, or one of a given type,
orsomething, and to respond to cancel requests (if there was an issue there).  Sorry this is more from a user's
perspective,I havn't got time atm to go digging through the code.  I'd be curious about implementing a possible
error-aggregationsystem for reporting on large sets like this but that might be overkill anyway.
 
     Thanks,
    Stephen

Re: PostgreSQL 8.2beta1 w/ VALUES

От
"Joshua D. Drake"
Дата:
>   Anyhow, don't know if there's really a good solution but it'd be nice
>   to only get one warning, or one of a given type, or something, and to

Except that one warning would not be accurate, because the warning is 
per tuple. How is postgresql going to know that the warning applies to 
the same set of data but just a different tuple?


>   respond to cancel requests (if there was an issue there).  Sorry this
>   is more from a user's perspective, I havn't got time atm to go digging
>   through the code.  I'd be curious about implementing a possible
>   error-aggregation system for reporting on large sets like this but
>   that might be overkill anyway.

You could dial down client_min_messages, set it to ERROR, then you won't 
see warnings ;)

Sincerely,

Joshua D. Drake


> 
>       Thanks,
> 
>         Stephen



Re: PostgreSQL 8.2beta1 w/ VALUES

От
"Luke Lonergan"
Дата:
Josh,

> >   Anyhow, don't know if there's really a good solution but
> it'd be nice
> >   to only get one warning, or one of a given type, or
> something, and
> > to
>
> Except that one warning would not be accurate, because the
> warning is per tuple. How is postgresql going to know that
> the warning applies to the same set of data but just a
> different tuple?

If it's going to roll back the entire load after that one warning, it
should terminate there.

This is a common problem with OLAP and based on the observation here,
this needs to be fixed.  Not being able to cancel out at this point is
even worse, can you imagine the frustration of trying to load 10GB of
data and having to wait until the end after seeing these warnings, while
knowing that you're just going to have to try again anyway?

Eventually we'll implement single row error handling, but even then
there should be a selectable behavior to terminate the load on the first
warning/error.

- Luke



Re: PostgreSQL 8.2beta1 w/ VALUES

От
Stephen Frost
Дата:
Luke, et al,

* Luke Lonergan (LLonergan@greenplum.com) wrote:
> > Except that one warning would not be accurate, because the
> > warning is per tuple. How is postgresql going to know that
> > the warning applies to the same set of data but just a
> > different tuple?

I didn't say it'd be easy. :)

> If it's going to roll back the entire load after that one warning, it
> should terminate there.

It didn't terminate it, though I agree that it would have been nice if I
could control if it would terminate on first warning or not.

> This is a common problem with OLAP and based on the observation here,
> this needs to be fixed.  Not being able to cancel out at this point is
> even worse, can you imagine the frustration of trying to load 10GB of
> data and having to wait until the end after seeing these warnings, while
> knowing that you're just going to have to try again anyway?

Yes, rather frustrating even with only 20k rows.

> Eventually we'll implement single row error handling, but even then
> there should be a selectable behavior to terminate the load on the first
> warning/error.

It'd be nice to be able to do what (I believe..) Oracle and Access can
do- dump the warnings/error messages/rows into a seperate table and go
over them afterwards..  Probably wouldn't have helped me in this case
but I've been in other situations where it would have been nice. :)
Thanks,
    Stephen

Re: PostgreSQL 8.2beta1 w/ VALUES

От
Markus Schaber
Дата:
Hi, Luke,

Luke Lonergan wrote:

> If it's going to roll back the entire load after that one warning, it
> should terminate there.

AFAIK, a warning is no reason for PostgreSQL to roll back anything.

That's the difference between a warning and an error.

HTH,
Markus

--
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org


Re: PostgreSQL 8.2beta1 w/ VALUES

От
Tom Lane
Дата:
"Luke Lonergan" <LLonergan@greenplum.com> writes:
> If it's going to roll back the entire load after that one warning, it
> should terminate there.

This was a warning, not an error.
        regards, tom lane


Re: PostgreSQL 8.2beta1 w/ VALUES

От
Tom Lane
Дата:
Stephen Frost <sfrost@snowman.net> writes:
>   When loading a rather large data set I started getting errors along
>   these lines:
> psql:/home/sfrost/school/cs750/reality/dump-anonymized.postgres.sql:262:
> WARNING:  nonstandard use of escape in a string literal
> LINE 1: ...XXXXXXXXXX 9999,9:9:999'),(99999,'000000000000',0,'XXXXX XXX...
>                                                              ^
> HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

>   Which, by themselves, aren't really an issue *except* for the fact
>   that I got an *insane* number of them.  I don't think it was quite one
>   for every row (of which there were 20,795, you'll note) but it was
>   more than enough to drive me insane.  Additionally, cancel requests
>   were ignored.

That's not too surprising because I don't believe there are any
CHECK_FOR_INTERRUPTS calls in the basic lex/parse loop.  That wouldn't
normally be a problem because that phase is pretty quick, but it is a
problem if the system is spitting tons of messages at you.

It seems like a reasonable thing to do would be to add a
CHECK_FOR_INTERRUPTS in elog.c just after sending a notice/warning
message to the client.

Comments?
        regards, tom lane


Re: PostgreSQL 8.2beta1 w/ VALUES

От
"Luke Lonergan"
Дата:
That seems right, there won't be a performance impact unless the warnings are issued.

- Luke

Msg is shrt cuz m on ma treo
-----Original Message-----
From:     Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent:    Saturday, September 30, 2006 01:48 PM Eastern Standard Time
To:    Stephen Frost
Cc:    pgsql-hackers@postgresql.org
Subject:    Re: [HACKERS] PostgreSQL 8.2beta1 w/ VALUES

Stephen Frost <sfrost@snowman.net> writes:
>   When loading a rather large data set I started getting errors along
>   these lines:
> psql:/home/sfrost/school/cs750/reality/dump-anonymized.postgres.sql:262:
> WARNING:  nonstandard use of escape in a string literal
> LINE 1: ...XXXXXXXXXX 9999,9:9:999'),(99999,'000000000000',0,'XXXXX XXX...
>                                                              ^
> HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

>   Which, by themselves, aren't really an issue *except* for the fact
>   that I got an *insane* number of them.  I don't think it was quite one
>   for every row (of which there were 20,795, you'll note) but it was
>   more than enough to drive me insane.  Additionally, cancel requests
>   were ignored.

That's not too surprising because I don't believe there are any
CHECK_FOR_INTERRUPTS calls in the basic lex/parse loop.  That wouldn't
normally be a problem because that phase is pretty quick, but it is a
problem if the system is spitting tons of messages at you.

It seems like a reasonable thing to do would be to add a
CHECK_FOR_INTERRUPTS in elog.c just after sending a notice/warning
message to the client.

Comments?
        regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend