lo_export does not work - help

From: "Van Osta, Peter [JanBe]" <PVOSTA(at)janbe(dot)jnj(dot)com>
To: "'pgsql-interfaces(at)postgresql(dot)org'" <pgsql-interfaces(at)postgresql(dot)org>
Subject: lo_export does not work - help
Date: 2000-03-06 14:58:34
Message-ID: 27CD61B9B111D211B0DC0008C72435B7EF3684@janbebeex1.janbe.jnj.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces

Hi,

I am using libpq-fe.h and libpq-fs.h with a postgreSQL 6.4.2 database to
get images in and out the database. lo_import seems to work, but lo_export
does not. I adapted an example to get the following code running:

sprintf( img_name, "'trial.tif'" );
sprintf( sql_query, "SELECT lo_export( image.raster, %s ) from image WHERE
filename = 'image2'", img_name );
res = PQexec( conn, sql_query );
if( PQresultStatus( res ) != PGRES_COMMAND_OK ){
sprintf( errbuf, "Query command to database '%s' failed:\n%s",
database, PQerrorMessage( conn ) );
PQclear( res );
exit_nicely( conn );
return im_report_error( "from_to_db", IE_NOT_OK, errbuf );
}

Anyone ever got "lo_export" running in a C-routine on Red hat Linux 5.2 ?

int from_to_db( IMAGE *in, char *filename, int frto )
{

#ifdef LINUX
Oid lobjOid = 0;
PGconn *conn = NULL;
PGresult *res = NULL;
#endif
int status = IE_OK;
char in_filename[1024], out_filename[1024],
sql_query[1024], img_name[256];
char *pghost = NULL, *pgport = NULL, *pgoptions = NULL,
*pgtty = NULL;
char *database = NULL;
char errbuf[512];

im_begin_func( "from_to_db" );

*errbuf = '\0';
*in_filename = '\0';
*out_filename = '\0';
*sql_query = '\0';
*img_name = '\0';

#ifdef LINUX
strcpy( in_filename, filename );
sprintf( out_filename, "/images/pvosta/trial.xxx" );
pghost = "blsbl1.janbe.jnj.com"; /* host name of the backend
server */
pgport = NULL; /* port of the
backend server */
pgoptions = NULL; /* special options
to start up the backend server */
pgtty = "/tmp/pgsqlbug.txt"; /* debug_fleging tty or file for the
backend server */
database = "linkscil1";

/* Set up the connection */
conn = PQsetdb( pghost, pgport, pgoptions, pgtty, database );
/* conn = PQsetdb( NULL, NULL, NULL, NULL, database ); */

/* check to see that the backend connection was successfully made */
if( PQstatus( conn ) == CONNECTION_BAD ){
sprintf( errbuf, "Connection to database '%s' failed:\n%s",
database, PQerrorMessage( conn ) );
exit_nicely( conn );
return im_report_error( "from_to_db", IE_NOT_OK, errbuf );
}

switch( frto ){
case 0:
/* Start image import to BLOB */
res = PQexec( conn, "BEGIN" );
PQclear( res );
printf( "Importing image \"%s\" into database
'%s'\n", ImageName( in ), database );
lobjOid = import_image( conn, in );

if( lobjOid == 0 ){
sprintf( errbuf, "lo_import to database '%s'
failed:\n%s",
database, PQerrorMessage( conn ) );
exit_nicely( conn );
return im_report_error( "from_to_db",
IE_NOT_OK, errbuf );
}

/* Send BLOB to database */
sprintf( sql_query, "INSERT INTO image ( filename,
area, raster ) VALUES ( 'image2', 100, lo_import( '%s' ) )", filename );
res = PQexec( conn, sql_query );
if( PQresultStatus(res) != PGRES_COMMAND_OK ){
sprintf( errbuf, "Query command to database
'%s' failed:\n%s",
database, PQerrorMessage( conn ) );
PQclear( res );
exit_nicely( conn );
return im_report_error( "from_to_db",
IE_NOT_OK, errbuf );
}

printf( "\t succeeded as large object %u.\n",
lobjOid );

break;
case 1:
/* Start file export from BLOB */
printf( "Exporting image \"%s\" from database
'%s'\n", ImageName( in ), database );

/* Retrieve BLOB from database */

sprintf( img_name, "'trial.tif'" );
sprintf( sql_query, "SELECT lo_export( image.raster,
%s ) from image WHERE filename = 'image2'", img_name );
res = PQexec( conn, sql_query );
if( PQresultStatus( res ) != PGRES_COMMAND_OK ){
sprintf( errbuf, "Query command to database
'%s' failed:\n%s",
database, PQerrorMessage( conn ) );
PQclear( res );
exit_nicely( conn );
return im_report_error( "from_to_db",
IE_NOT_OK, errbuf );
}

/*
if( export_image( conn, lobjOid, in ) < IE_OK ){
sprintf( errbuf, "lo_export from database
'%s' failed:\n%s",
database, PQerrorMessage( conn ) );
exit_nicely( conn );
return im_report_error( "from_to_db",
IE_NOT_OK, errbuf );
}

*/
printf( "\tsucceeded\n" );

break;
default:
sprintf( errbuf, "Illegal option for '%s' failed:",
database );
exit_nicely( conn );
return im_report_error( "from_to_db", IE_NOT_OK,
errbuf );
break;
}

res = PQexec( conn, "END" );
PQclear( res );
PQfinish( conn );

if( ( status < IE_OK ) || ( im_get_status() < IE_OK ) )
return im_report_error( "from_to_db", IE_NOT_OK, "from_to_db
failed" );

#endif

printf( "Finished\n" );

im_end_func( "from_to_db" );

return( IE_OK );
}

Regards,

Peter Van Osta, MD

Biological Imaging Laboratory
Life Sciences Department I - building 160 office 137
Janssen Research Foundation
Beerse, Belgium

tel. +32 (0)14 60.6065
fax.: +32 (0)14 60.5788

Browse pgsql-interfaces by date

  From Date Subject
Next Message Mark Dalphin 2000-03-06 17:56:01 Re: Quick perl question
Previous Message Jaume 2000-03-06 12:58:51 mapping (jdbc)