Re: your mail - Mailing list pgsql-sql

From tjk@tksoft.com
Subject Re: your mail
Date
Msg-id 199909161911.MAA01273@uno.tksoft.com
Whole thread Raw
In response to ...  (Jeff MacDonald <jeff@hub.org>)
List pgsql-sql
Jeff,
The builtin functions lo_import and lo_export are
for files only. Because of the 8k limit, it wouldn't
be possible to insert larger values.

You need to create your own routine which stores the value in a
file and then imports/exports it.

Something like ...
(not tested, just for an idea.)

sub writetofile {
    my $data = shift;
    my $tmpfile = &newtmpfile || return "";
    open (FILE, ">$tmpfile") || return "";
    print FILE $data;
    close (FILE);
    return $tmpfile;
}

Then replace the following lines

> my $statement = $dbh->prepare("INSERT INTO test values('something',lo_import($largestring));");
>    $statement->execute();
>    $statement->finish();
>
> $dbh->commit;
> $dbh->disconnect;

with

my $largestring = &writetofile($largestring) || die("bad data.");
my $statement = $dbh->prepare("INSERT INTO test values('something',lo_import($largestring));");
    $statement->execute();
    $statement->finish();

 $dbh->commit;
 $dbh->disconnect;
unlink $largestring;

exit (0);


Troy


>
> Got a presumably very quick question.
>
> I'm writing a perl script. lets say i have a variable that's > 8k
> , for arguments sake it's 64k.
>
> How can i insert this into a database, do i need large objects ?
> and if so, do i use the lo_import ? for some reason it seems that
> this is only for files..
>
> below is what i have but it doesn't seem to work..
>
> jeff=> \d test
> Table    = test
> +----------------------------------+----------------------------------+-------+
> |              Field               |              Type                | Length|
> +----------------------------------+----------------------------------+-------+
> | blurb                            | text                             |   var |
> | message                          | oid                              |     4 |
> +----------------------------------+----------------------------------+-------+
>
> ***************** code ********************
>
> #!/usr/bin/perl
>
> use strict;
> use DBI;
>
>
> my $dbh = DBI->connect("dbname=narf host=narf port=narf",'narf','','Pg',{'AutoCommit' => 0});
> if (!$dbh) {
>         exit print "Could not connect: $DBI::errstr\n";
> }
>
>
> ## lets create the large value here...
> ## this string is 64K (2^16)
>
>
> my $largestring = 'x';
> for (my $i=0;$i < 16 ;$i++) {
>         $largestring = $largestring . $largestring;
>         }
>
>
> my $statement = $dbh->prepare("INSERT INTO test values('something',lo_import($largestring));");
>    $statement->execute();
>    $statement->finish();
>
> $dbh->commit;
> $dbh->disconnect;
>
> thanks for the help.
>
> ======================================================
> Jeff MacDonald
>     jeff@hub.org    webpage: http://hub.org/~jeff
>     jeff@pgsql.com    irc: bignose on EFnet
> ======================================================
>
>
> ************
>
>

pgsql-sql by date:

Previous
From: "Mike Field"
Date:
Subject: PGdump then PHP search
Next
From: "tjk@tksoft.com"
Date:
Subject: Re: [SQL] PGdump then PHP search