Thread: problem with 'copy binary' file format

problem with 'copy binary' file format

From
john guthrie
Date:
i am having a problem creating a 'copy binary' input file in c
on my linux box running postgresql 7.2.2. the error message i get is:  ERROR:  copy: line 1, pg_atoi: error in
"PGBCOPY":can't parse "PGBCOPY"
 

so it looks to me like the header doesn't match what it should. my
code creates/writes the header like this:
    char *bchead = "PGBCOPY\n\377\r\n\0";    unsigned int bcsig = 0x01020304;    unsigned int bcflags = 0x0;
unsignedint bcext = 0x0;
 
    outFile = fopen(tmpfile, "w");    fwrite(bchead,1,12,outFile);    fwrite(&bcsig,1,4,outFile);
fwrite(&bcflags,1,4,outFile);   fwrite(&bcext,1,4,outFile);
 

when i 'od -c' the created file, i see:
local jguthrie> od -c /tmp/packets.bin
0000000   P  G  B  C  O  P  Y \n 377 \r  \n  \0 004 003 002 001
0000020  \0 \0 \0 \0 \0 \0 \0 \0 004 \0 377 377
0000034

(this for a 4-field tuple with no rows in the data file).

this all seems to match up with the documentation online: http://www.postgresql.org/idocs/index.php?sql-copy.html

any help much appreciated.

thanks. john.



Re: problem with 'copy binary' file format

From
Tom Lane
Date:
john guthrie <jguthrie@psynapsetech.net> writes:
> i am having a problem creating a 'copy binary' input file in c
> on my linux box running postgresql 7.2.2. the error message i get is:
>    ERROR:  copy: line 1, pg_atoi: error in "PGBCOPY": can't parse "PGBCOPY"

And what exactly are you doing with the file after you create it?
pg_atoi shouldn't be invoked at all during COPY BINARY FROM ...
        regards, tom lane


Re: problem with 'copy binary' file format

From
john guthrie
Date:
i agree. i'm not doing anything with the file. i can start up psql, type:
  copy binary my_table from 'tmpfile';

and get the exact same error message. the table schema, by the way, 
consists of two int4's, a timestamp, and a bytea.

thanks.
john

Tom Lane wrote:
> john guthrie <jguthrie@psynapsetech.net> writes:
> 
>>i am having a problem creating a 'copy binary' input file in c
>>on my linux box running postgresql 7.2.2. the error message i get is:
>>   ERROR:  copy: line 1, pg_atoi: error in "PGBCOPY": can't parse "PGBCOPY"
> 
> 
> And what exactly are you doing with the file after you create it?
> pg_atoi shouldn't be invoked at all during COPY BINARY FROM ...
> 
>             regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)



Re: problem with 'copy binary' file format

From
john guthrie
Date:
moron alert - i forgot the 'binary' in the sql i sent to postgresql, 
i.e. i used:  copy my_table from 'somefile.bin';
instead of:  copy binary my_table from 'somefile.bin';
only took me a whole day to find this. sheesh!

john

john guthrie wrote:
> i am having a problem creating a 'copy binary' input file in c
> on my linux box running postgresql 7.2.2. the error message i get is:
>   ERROR:  copy: line 1, pg_atoi: error in "PGBCOPY": can't parse "PGBCOPY"
> 
> so it looks to me like the header doesn't match what it should. my
> code creates/writes the header like this:
> 
>     char *bchead = "PGBCOPY\n\377\r\n\0";
>     unsigned int bcsig = 0x01020304;
>     unsigned int bcflags = 0x0;
>     unsigned int bcext = 0x0;
> 
>     outFile = fopen(tmpfile, "w");
>     fwrite(bchead,1,12,outFile);
>     fwrite(&bcsig,1,4,outFile);
>     fwrite(&bcflags,1,4,outFile);
>     fwrite(&bcext,1,4,outFile);
> 
> when i 'od -c' the created file, i see:
> local jguthrie> od -c /tmp/packets.bin
> 0000000   P  G  B  C  O  P  Y \n 377 \r  \n  \0 004 003 002 001
> 0000020  \0 \0 \0 \0 \0 \0 \0 \0 004 \0 377 377
> 0000034
> 
> (this for a 4-field tuple with no rows in the data file).
> 
> this all seems to match up with the documentation online:
>  http://www.postgresql.org/idocs/index.php?sql-copy.html
> 
> any help much appreciated.
> 
> thanks. john.
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org