pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Scott Cain <cain@cshl.edu>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Michael Fuhr <mike@fuhr.org>
Cc: pgsql-interfaces@postgresql.org
Subject: Re: DBD::Pg and "invalid frontend message type 10"
Date: Wed, 24 Aug 2005 11:30:30 -0400
Message-ID: <1124897430.2940.143.camel@localhost.localdomain> (raw)
In-Reply-To: <26062.1124896206@sss.pgh.pa.us>
References: <1124889034.2940.132.camel@localhost.localdomain>
	<20050824133453.GA50029@winnie.fuhr.org>
	<26062.1124896206@sss.pgh.pa.us>

On Wed, 2005-08-24 at 11:10 -0400, Tom Lane wrote:
> Since 10 is the ascii code for line-feed, I wonder if this could
> indicate an unwanted newline format conversion someplace.  In particular
> I'm imagining something like this:
> 
> * frontend thinks it's sending 'Q' message type, message length,
>   and a query string that ends with \n:
> 	Q 0 0 0 42 SELECT ... \n
> * some evil code changes this to
> 	Q 0 0 0 42 SELECT ... \r \n
> * backend receives and executes
> 	Q 0 0 0 42 SELECT ... \r
>   which is perfectly OK
> * next time backend tries to read a message, it gets the \n
>   which leads to the reported complaint
> 
> I've glossed over some details but in general it seems like something
> like this could be happening, if you are using the V3 protocol which
> relies on message length words.
> 

Wow, Tom, I have no idea what that means!  I haven't heard back from my
user whom I asked to turn on query logging so that we can see what the
server is seeing, but I suspect that the offending code may be in this
sub that is doing a COPY FROM STDIN:

sub copy_from_stdin {
  my $dbh      = shift;
  my $table    = shift;
  my $fields   = shift;
  my $file     = shift;
  my $sequence = shift;
  my $nextval  = shift;

  warn "Loading data into $table table ...\n";
  my $query = "COPY $table $fields FROM STDIN;";
  #warn "\t".$query;
  my $sth = $dbh->prepare($query);
  $sth->execute();

  open FILE, $file;
  while (<FILE>) {
    $dbh->func($_, 'putline');
  }
  $dbh->func('endcopy');  # no docs on this func--got from google
  close FILE;

  $sth->finish;
  #update the sequence so that later inserts will work
  $dbh->do("SELECT setval('public.$sequence', $nextval) FROM $table");
}

Does that help at all?

Thanks,
Scott

-- 
------------------------------------------------------------------------
Scott Cain, Ph. D.                                         cain@cshl.edu
GMOD Coordinator (http://www.gmod.org/)                     216-392-3087
Cold Spring Harbor Laboratory




view thread (5+ messages)  latest in thread

Message-ID: <1124897430.2940.143.camel@localhost.localdomain>
Permalink:  ../1124897430.2940.143.camel@localhost.localdomain/
Also on:    postgresql.org/message-id/1124897430.2940.143.camel@localhost.localdomain

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: cain@cshl.edu, tgl@sss.pgh.pa.us, mike@fuhr.org
  Subject: Re: DBD::Pg and "invalid frontend message type 10"
  In-Reply-To: <1124897430.2940.143.camel@localhost.localdomain>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox