Thread: text storage and parsing errors

text storage and parsing errors

From
tom
Date:
For what may be really strange reasons I am trying to store emails
into a database table.  The idea is to take the entire original
message and store it into a table with two columns, an serial primary
key column and a column for the message.

Originally I thought I would just use column type text but changed
that to bytea based on the fact that the dbmail project uses bytea
for reasons of character support.

I'm running into problems with perl throwing an error of :'invalid
input syntax for type bytea'.
I have not yet been able to capture a message for any further testing
because the error tends to destroy the message in process...

the way that I'm using perl is to do a full prepare and execute
statements, which as I understand perl, will do all the character
escaping necessary to store the message.  meaning, If I have
characters like (') or (`) they should be escaped when they are
entered into the SQL parameter.  I am wondering if this is indeed the
case.

But I'm looking for any suggestions or considerations when trying to
d this approach to avoid this kind of text parsing problem.


Re: text storage and parsing errors

From
"Daniel Verite"
Date:
tom wrote:

> the way that I'm using perl is to do a full prepare and execute
> statements, which as I understand perl, will do all the character
> escaping necessary to store the message.  meaning, If I have
> characters like (') or (`) they should be escaped when they are
> entered into the SQL parameter.  I am wondering if this is indeed the
> case.
>
> But I'm looking for any suggestions or considerations when trying to
> d this approach to avoid this kind of text parsing problem.

Assuming you're using DBD::Pg and a placeholder for the bytea parameter of your
query, you must specify its type explicitly, like this:

use DBD::Pg qw(:pg_types);
[...]
$s=$dbh->prepare("INSERT INTO the_table(contents) VALUES(?)");
$s->bind_param(1, $the_data, { pg_type => DBD::Pg::PG_BYTEA });
$s->execute;

Hope this helps,

--
 Daniel
 PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org

Re: text storage and parsing errors

From
"Daniel Verite"
Date:
    tom wrote:

> the way that I'm using perl is to do a full prepare and execute
> statements, which as I understand perl, will do all the character
> escaping necessary to store the message.  meaning, If I have
> characters like (') or (`) they should be escaped when they are
> entered into the SQL parameter.  I am wondering if this is indeed the
> case.
>
> But I'm looking for any suggestions or considerations when trying to
> d this approach to avoid this kind of text parsing problem.

Assuming you're using DBD::Pg and a placeholder for the bytea parameter of your
query, you must specify its type explicitly, like this:

use DBD::Pg qw(:pg_types);
[...]
$s=$dbh->prepare("INSERT INTO the_table(contents) VALUES(?)");
$s->bind_param(1, $the_data, { pg_type => DBD::Pg::PG_BYTEA });
$s->execute;

Hope this helps,

--
 Daniel
 PostgreSQL-powered mail user agent and storage: http://www.manitou-mail.org