Обсуждение: problem with 'copy binary' file format
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.
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
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)
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