<?xml version="1.0" encoding="windows-1252"?>
<node id="20355" title="Difficulty inserting a large object using DBD::Pg" created="2000-06-29 11:46:16" updated="2005-08-15 07:20:13">
<type id="115">
perlquestion</type>
<author id="6415">
kudra</author>
<data>
<field name="doctext">
I am trying to insert a large object in a PostgreSQL database, but am
having difficulties finding a graceful way to do this.  Note that the
included code has been simplified to avoid distractions--I am well aware
that I should be addressing possible errors.
&lt;p&gt;
System information:&lt;br&gt;
&lt;ul&gt;&lt;li&gt;perl, version 5.005_03&lt;/li&gt;
&lt;li&gt;Linux 2.2.14 i686&lt;/li&gt;
&lt;li&gt;Postgres: 6.5.3&lt;/li&gt;
&lt;li&gt;DBI: 1.1.3&lt;/li&gt;
&lt;li&gt;DBD Pg: 0.93&lt;/li&gt;&lt;/ul&gt; 
&lt;p&gt;
I have created a table with one field, &lt;strong&gt;data&lt;/strong&gt;, which is
of type OID.  Next I attempt to insert by more or less copying the
code on page 153 of 'Programming the Perl DBI':
&lt;code&gt;  
my $sth = 
$dbh-&gt;prepare("insert into foo(data) values (?);");
$sth-&gt;bind_param(1, $value, SQL_LONGVARBINARY);
$sth-&gt;execute();
&lt;/code&gt;
I receive a warning that binding the value isn't permitted:
&lt;code&gt; 
SQL type 1075548612 for 'rc' is not fully supported, bound as VARCHAR instead at  ./1.0 line 122.
&lt;/code&gt;
Whereupon it fails with a pg_atoi error.
&lt;p&gt;
I can insert by writing $value to a file and using the (presumably
Postgres-specific) function lo_import:
&lt;code&gt;
$dbh-&gt;prepare("insert into foo(data) values 
(lo_import('/tmp/lame'));")
&lt;/code&gt;
I'm not pleased with this solution because it requires the creation
of a temporary file and it seems to undermine the use of DBI to use
a database-specific insert.
&lt;p&gt;
I imagine some of the problem has to do with the unusual way Postgres deals
with large objects.  I expected that the Pg DBD would compensate
for that, perhaps using lo_import, but accepting the format shown
earlier.
&lt;p&gt;
The fact that I can't seem to find any documentation mentioning this problem
(which I imagine must have occurred before) makes me feel as if I've
completely failed to grasp something simple (or that Pg's documentation-dearth
is contagious, affecting anything that touches Postgres).  Is there a
better way to insert a large object in Postgres using DBI?  Thanks in
advance.
</field>
</data>
</node>
