Discussion:
Insert binary data on postgre
(too old to reply)
Eduardo S. Fontanetti
2004-06-24 19:16:40 UTC
Permalink
How can I do to put a file into the PostgreSQL ? I
have got the contents of file in binary yet and put on
a String on my APP, but when I try to insert it on
postgre, it returns to me:

ERROR: parser: unterminated quoted string at or near
"BMæ»' at character 90

My string:

ConnP.Execute "insert into fotossocios(arquivo)
values('" & Conteudo & "')"

Could somebody help me how to construct the right
string ?

Thanks
Eduardo

______________________________________________________________________

Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html
mike g
2004-06-25 03:28:04 UTC
Permalink
What data type did you use to define the binary column? bytea or LO?
Post by Eduardo S. Fontanetti
How can I do to put a file into the PostgreSQL ? I
have got the contents of file in binary yet and put on
a String on my APP, but when I try to insert it on
ERROR: parser: unterminated quoted string at or near
"BMÊ»' at character 90
ConnP.Execute "insert into fotossocios(arquivo)
values('" & Conteudo & "')"
Could somebody help me how to construct the right
string ?
Thanks
Eduardo
______________________________________________________________________
Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly
Eduardo S. Fontanetti
2004-06-25 12:17:38 UTC
Permalink
I am using bytea data type and Visual Basic 6.

I saw in another place, that I can insert byte values
in the Postgre with a double backslash, then I used a
function to translate the binary string to ANSI
string. Then I can use: \\001\\010\\047 ...

Somebody could say me if its right?

Eduardo

--- mike g <***@thegodshalls.com> escreveu: > What
data type did you use to define the binary
Post by mike g
column? bytea or LO?
On Thu, 2004-06-24 at 14:16, Eduardo S. Fontanetti
Post by Eduardo S. Fontanetti
How can I do to put a file into the PostgreSQL ? I
have got the contents of file in binary yet and
put on
Post by Eduardo S. Fontanetti
a String on my APP, but when I try to insert it on
ERROR: parser: unterminated quoted string at or
near
Post by Eduardo S. Fontanetti
"BMæ»' at character 90
ConnP.Execute "insert into fotossocios(arquivo)
values('" & Conteudo & "')"
Could somebody help me how to construct the right
string ?
Thanks
Eduardo
______________________________________________________________________
Post by mike g
Post by Eduardo S. Fontanetti
Yahoo! Mail - agora com 100MB de espaço,
anti-spam e antivírus grátis!
Post by Eduardo S. Fontanetti
http://br.info.mail.yahoo.com/
---------------------------(end of
broadcast)---------------------------
Post by Eduardo S. Fontanetti
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html
---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please
send an appropriate
subscribe-nomail command to
message can get through to the mailing list
cleanly
______________________________________________________________________

Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
joining column's datatypes do not match
Eduardo S. Fontanetti
2004-06-25 12:43:09 UTC
Permalink
I forgot a little, or better, a big detail, to do this
translating from binary to ANSI of a file with 100Kb,
it will return something like 500000 bytes, and this
process is very, very and very slow. Then I need to
use another way.

I've tried to use the Replace native function from the
VB to put a backslash before the ' on the string, but
it hadn't worked, I think it don't interprets the
character like postgres. Somebody knows how to solve
it? How to identify the character exactly like the
postgres?

Thanks
Eduardo

--- "Eduardo S. Fontanetti" <***@yahoo.com.br>
escreveu: > I am using bytea data type and Visual
Basic 6.
Post by Eduardo S. Fontanetti
I saw in another place, that I can insert byte
values
in the Postgre with a double backslash, then I used
a
function to translate the binary string to ANSI
string. Then I can use: \\001\\010\\047 ...
Somebody could say me if its right?
Eduardo
data type did you use to define the binary
Post by mike g
column? bytea or LO?
On Thu, 2004-06-24 at 14:16, Eduardo S. Fontanetti
Post by Eduardo S. Fontanetti
How can I do to put a file into the PostgreSQL ?
I
Post by mike g
Post by Eduardo S. Fontanetti
have got the contents of file in binary yet and
put on
Post by Eduardo S. Fontanetti
a String on my APP, but when I try to insert it
on
Post by mike g
Post by Eduardo S. Fontanetti
ERROR: parser: unterminated quoted string at or
near
Post by Eduardo S. Fontanetti
"BMæ»' at character 90
ConnP.Execute "insert into fotossocios(arquivo)
values('" & Conteudo & "')"
Could somebody help me how to construct the
right
Post by mike g
Post by Eduardo S. Fontanetti
string ?
Thanks
Eduardo
______________________________________________________________________
Post by Eduardo S. Fontanetti
Post by mike g
Post by Eduardo S. Fontanetti
Yahoo! Mail - agora com 100MB de espaço,
anti-spam e antivírus grátis!
Post by Eduardo S. Fontanetti
http://br.info.mail.yahoo.com/
---------------------------(end of
broadcast)---------------------------
Post by Eduardo S. Fontanetti
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html
---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please
send an appropriate
subscribe-nomail command to
message can get through to the mailing list
cleanly
______________________________________________________________________
Post by Eduardo S. Fontanetti
Yahoo! Mail - agora com 100MB de espaço, anti-spam e
antivírus grátis!
http://br.info.mail.yahoo.com/
---------------------------(end of
broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose
an index scan if your
joining column's datatypes do not match
______________________________________________________________________

Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to ***@postgresql.org)
Radu-Adrian Popescu
2004-06-25 14:24:12 UTC
Permalink
Post by Eduardo S. Fontanetti
I forgot a little, or better, a big detail, to do this
translating from binary to ANSI of a file with 100Kb,
it will return something like 500000 bytes, and this
process is very, very and very slow. Then I need to
use another way.
I've tried to use the Replace native function from the
VB to put a backslash before the ' on the string, but
it hadn't worked, I think it don't interprets the
character like postgres. Somebody knows how to solve
it? How to identify the character exactly like the
postgres?
Check out
http://www.postgresql.org/docs/7.4/interactive/libpq-exec.html#LIBPQ-EXEC-ESCAPE-BYTEA

The escape functions are located in the libpq library (PostgreSQL's native C
library), that has a Windows native port.

You may either look at the code and implement that in VB (don't think it will
perform very well though) or write a COM wrapper or something like that to make
those functions available in VB.

Best of luck,
--
Radu-Adrian Popescu
CSA, DBA, Developer
Aldrapay MD
Aldratech Ltd.
+40213212243


---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
joining column's datatypes do not match
Frank Knobbe
2004-06-28 04:51:51 UTC
Permalink
Post by Eduardo S. Fontanetti
I forgot a little, or better, a big detail, to do this
translating from binary to ANSI of a file with 100Kb,
it will return something like 500000 bytes, and this
process is very, very and very slow. Then I need to
use another way.
Have you considered uuencoding or binhexing the data so that you end up
with a "clean" string you can commit? (It will still suck up twice the
file size in space though).

Regards,
Frank
Eduardo S. Fontanetti
2004-06-28 13:50:24 UTC
Permalink
Yes, I've tried, but it is very slow to uuencode.

But I found another thing very better, the functions
lo_import and lo_export.

It solved my problem, really very good!!

Thanks a lot for all the help!

Eduardo

--- Frank Knobbe <***@knobbe.us> escreveu: > On Fri,
2004-06-25 at 07:43, Eduardo S. Fontanetti
Post by Eduardo S. Fontanetti
Post by Eduardo S. Fontanetti
I forgot a little, or better, a big detail, to do
this
Post by Eduardo S. Fontanetti
translating from binary to ANSI of a file with
100Kb,
Post by Eduardo S. Fontanetti
it will return something like 500000 bytes, and
this
Post by Eduardo S. Fontanetti
process is very, very and very slow. Then I need
to
Post by Eduardo S. Fontanetti
use another way.
Have you considered uuencoding or binhexing the data
so that you end up
with a "clean" string you can commit? (It will still
suck up twice the
file size in space though).
Regards,
Frank
ATTACHMENT part 2 application/pgp-signature
name=signature.asc


______________________________________________________________________

Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Andrew Biagioni
2004-06-25 04:06:23 UTC
Permalink
Eduardo,

your problem is the way you are submitting the string. Since it's a
binary, it can contain any "character" value (from 0 to 255) and
PostgreSQL treats certain characters as special characters. The main
example you're running into is the quote character.

If you try to submit a string like this:

I had a 'great' time

and you try to execute:

INSERT INTO mytable ( myfield ) VALUES ( 'I had a 'great' time' );

the parser will of course see a second quote right before "great" and
terminate the string. Then it will be very confused by "great' time'" !!!

The correct insert statement would ESCAPE (i.e., precede with a back
slash) the quotes IN the string, as follows:

INSERT INTO mytable ( myfield ) VALUES ( 'I had a \'great\' time' );

or:

INSERT INTO mytable ( myfield ) VALUES ( 'I had a ''great'' time' );

The parser knows that \' and '' are a character in a string
corresponding to a single quote, NOT an actual quote indicating the
beginning and the end of a string. The string that will be added to the
database will actually contain a single quote, not the escaped sequence.

Note that, depending on your code, you may need to do more when you read
back the string.

There is at least one other character that must be escaped: the actual
backslash, since it's expected to be part of an escape sequence, so you
replace "\" with "\\" which tells the parser, "this is really a
backslash" and it inserts a SINGLE backslash in the string. Note that
otherwise, the parser will try to do something with the character that
follows the backslash; if you're lucky, you'll just lose the backslash.

PLEASE NOTE: Depending on what you are using to connect to PostgreSQL,
there may be different syntaxes; some drivers expose function calls
with parameters, so you could create a Function called "InsertBinary (
text, text, text )" in PostgreSQL and call it from your code as

String rslt = ConnP.ExecuteFunction ( "InsertBinary", "fotossocios",
"arquivo", myString );

The assumption here is that ExecuteFunction will cause a function to be
called ($1), with parameters $2, $3, and $4, and returning a String with
the result of the function execution.

Sorry, I don't know of a driver out there that offers this, but it's the
concept of "stored procedure calls" with Oracle, and I would suspect
that PostgreSQL somewhere has something similar.

Andrew
Post by Eduardo S. Fontanetti
How can I do to put a file into the PostgreSQL ? I
have got the contents of file in binary yet and put on
a String on my APP, but when I try to insert it on
ERROR: parser: unterminated quoted string at or near
"BMæ»' at character 90
ConnP.Execute "insert into fotossocios(arquivo)
values('" & Conteudo & "')"
Could somebody help me how to construct the right
string ?
Thanks
Eduardo
______________________________________________________________________
Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly
Radu-Adrian Popescu
2004-06-25 09:11:00 UTC
Permalink
Post by Eduardo S. Fontanetti
How can I do to put a file into the PostgreSQL ? I
have got the contents of file in binary yet and put on
a String on my APP, but when I try to insert it on
ERROR: parser: unterminated quoted string at or near
"BMæ»' at character 90
If you're using Java, check out http://doc.postgresintl.com/jdbc/ch08.html

Cheers,
--
Radu-Adrian Popescu
CSA, DBA, Developer
Aldrapay MD
Aldratech Ltd.
+40213212243


---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly
Loading...