Thread: pg_put_line() Frustration

pg_put_line() Frustration

From
"Simon Hewitt"
Date:
Hi all,

I am currently working on an application that will input multple lines into
a Postgre database. I am using the following code

  $sql = "COPY table_2 FROM STDIN DELIMITER AS '\t'";
  pg_query($dbc, $sql);
  $sql = $data1."\t".$data2."\t".implode("\t",
$data)."\ttrue\t05-05-2005\n";
  pg_put_line($this->dbc, $sql);
  if(!pg_put_line($dbc, "\\N"))
  {
    pg_end_copy($dbc);
    $error_message('Could not enter details');
  }
  else
  {
     pg_end_copy($this->dbc);
     unset($data);
  }

This gives me an example line like

57    BELF    254    0    10877    5138    0    0    true    05-05-2005

To go into a table with fields INT, CHAR(4) INT, INT, INT, INT, INT, INT,
BOOL, DATE

However, its not going in...

I'm getting an error

ERROR:  missing data for column "col2"

With no data being inserted.

If anyone could point out where I'm going wrong I'd be forever in their debt

Thanks

Simon



Re: pg_put_line() Frustration

From
Michael Fuhr
Date:
On Mon, Jun 20, 2005 at 01:29:47PM +0000, Simon Hewitt wrote:
>
> I am currently working on an application that will input multple lines into
> a Postgre database. I am using the following code

It's PostgreSQL or Postgres, not Postgre.

>  $sql = "COPY table_2 FROM STDIN DELIMITER AS '\t'";
>  pg_query($dbc, $sql);
>  $sql = $data1."\t".$data2."\t".implode("\t",
> $data)."\ttrue\t05-05-2005\n";
>  pg_put_line($this->dbc, $sql);
>  if(!pg_put_line($dbc, "\\N"))

The last line above attempts to add a row with a single NULL value,
so you get an error about missing data for the other columns.  What's
the purpose of that line?  Why do you sometimes use $dbc and sometimes
$this->dbc?  Do they refer to the same connection or to different
connections?

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: pg_put_line() Frustration

From
Christopher Kings-Lynne
Date:
Use pg_copy_to and pg_copy_from instead...

Chris

Simon Hewitt wrote:
> Hi all,
>
> I am currently working on an application that will input multple lines
> into a Postgre database. I am using the following code
>
>  $sql = "COPY table_2 FROM STDIN DELIMITER AS '\t'";
>  pg_query($dbc, $sql);
>  $sql = $data1."\t".$data2."\t".implode("\t",
> $data)."\ttrue\t05-05-2005\n";
>  pg_put_line($this->dbc, $sql);
>  if(!pg_put_line($dbc, "\\N"))
>  {
>    pg_end_copy($dbc);
>    $error_message('Could not enter details');
>  }
>  else
>  {
>     pg_end_copy($this->dbc);
>     unset($data);
>  }
>
> This gives me an example line like
>
> 57    BELF    254    0    10877    5138    0    0    true    05-05-2005
>
> To go into a table with fields INT, CHAR(4) INT, INT, INT, INT, INT,
> INT, BOOL, DATE
>
> However, its not going in...
>
> I'm getting an error
>
> ERROR:  missing data for column "col2"
>
> With no data being inserted.
>
> If anyone could point out where I'm going wrong I'd be forever in their
> debt
>
> Thanks
>
> Simon
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>               http://archives.postgresql.org