Thread: 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