Re: [HACKERS] Continued problems with pgdump, Large Objects and crashing backends

From: Peter T Mount <peter(at)retep(dot)org(dot)uk>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Hackers List <hackers(at)postgresql(dot)org>, Jason Venner <jason(at)idiom(dot)com>
Subject: Re: [HACKERS] Continued problems with pgdump, Large Objects and crashing backends
Date: 1999-02-18 07:18:02
Message-ID: Pine.LNX.4.04.9902180711220.8265-100000@maidast.retep.org.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, 17 Feb 1999, Tom Lane wrote:

> Peter T Mount <peter(at)retep(dot)org(dot)uk> writes:
> > However, this fails when creating functions that have more than one sql
> > statement in them. He has some functions that insert into a table
> > depending on some arguments, then issue a select on the last arg which is
> > the functions result. However, pgdump doesn't end the select with a ; and
> > this causes the 6.5 backend to fail. Adding the ; fixes the problem.
>
> What does 'fail' mean exactly? Crash, or just reject the query?
> It sounds like there is a pg_dump bug here (omitting a required
> semicolon) but I don't understand whether there's also a backend bug.

I didn't say this was a backend bug, but was one thing I came across while
looking at the following problem.

> > Running the backed with the -d2 flag, these expand to:
>
> > pq_recvbuf: recv() failed, errno 2
> > proc_exit(0) [#0]
> > shmem_exit(0) [#0]
> > exit(0)
> > /usr/local/pgsql/bin/postmaster: reaping dead processes...
> > /usr/local/pgsql/bin/postmaster: CleanupProc: pid 6731 exited with status 0
> > pq_recvbuf: recv() failed, errno 0
> > proc_exit(0) [#0]
> > shmem_exit(0) [#0]
> > exit(0)
> > /usr/local/pgsql/bin/postmaster: reaping dead processes...
> > /usr/local/pgsql/bin/postmaster: CleanupProc: pid 6730 exited with status 0
>
> This doesn't look like a segv trace to me --- if the backend was
> coredumping then the postmaster should see a nonzero exit status.
>
> The recv() complaints probably indicate that the client application
> disconnected ungracefully (ie, without sending the 'X' terminate
> message). It's curious that they're not both alike.
> That might be a red herring however --- right now pq_recvbuf doesn't
> distinguish plain EOF from a true error, and if it's plain EOF then
> whatever errno was last set to gets printed. Think I'll go fix that.
>
> Barring more evidence, all I see here is client disconnect, not a
> backend failure.

Hmmm, I've never seen the recv() problem before with any JDBC app, only
this one.

PS: Currently the JDBC driver is still using the 6.3.x protocol. When 6.4
came out I didn't implement the CANCEL stuff, as I was concentrating on
getting more of the innards implemented.

Anyhow, if the terminate message is a problem, I'll upgrade the protocol.

> What's your basis for claiming a segv crash?

I think the segv came from Jason (who's run it against 6.3.x and 6.4.x).

> > Ok, now the problem. When he sets autocommit to false, the JDBC driver
> > sends BEGIN to the backend. Ok so far, however, something then fails
> > during the first large object's load, and causes everything else to fail.
>
> That's not a bug, it's a feature ... allegedly, anyway. Any error
> inside a transaction means the entire transaction is aborted. And
> the backend will keep reminding you so until you cooperate by ending
> the transaction. I don't like the behavior very much either, but
> it's operating as designed.

I'm going to overhaul the autocommit(false) code. I suspect it's broken,
but I need to sit down and figure what is happening with this problem
first.

Peter

--
Peter T Mount peter(at)retep(dot)org(dot)uk
Main Homepage: http://www.retep.org.uk
PostgreSQL JDBC Faq: http://www.retep.org.uk/postgres
Java PDF Generator: http://www.retep.org.uk/pdf

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Stupor Genius 1999-02-18 10:50:52 RE: [HACKERS] 8K block limit
Previous Message Bruce Momjian 1999-02-18 05:10:16 Re: [HACKERS] Bushy Plans fixed