Copying bytea data out via pgsql

Started by John Wellsover 20 years ago4 messagesgeneral
Jump to latest
#1John Wells
jb@sourceillustrated.com

Guys,

I have a number of jpegs and tiffs that are stored in a bytea field in a
PostgreSQL database by a Java program using Hibernate.

I need to copy these out to a flat file via pgsql for viewing, etc. I've
tried

psql -c 'select binarydata_field from my_image_table where id=1' mydb >
flatfile

but although that seems to provide the data it does not seem to pull it in
a valid image format. Is there some special handling I need to do here?

Thanks!
John

#2Leonel Nunez
lnunez@enelserver.com
In reply to: John Wells (#1)
Re: Copying bytea data out via pgsql

John Wells wrote:

Guys,

I have a number of jpegs and tiffs that are stored in a bytea field in a
PostgreSQL database by a Java program using Hibernate.

I need to copy these out to a flat file via pgsql for viewing, etc. I've
tried

psql -c 'select binarydata_field from my_image_table where id=1' mydb >
flatfile

but although that seems to provide the data it does not seem to pull it in
a valid image format. Is there some special handling I need to do here?

Thanks!
John

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

You have on the flatfile info about the query
let's say

leonel=> select count (*) from image;
count
-------
1
(1 row)

you got fieldname, -------, the image and ( 1 row ) on the
flatfile file

you need to make a script to put the image on that flatfile
just read it as any query and put the contents of that field on the file

I use this little Perl Script

#!/usr/bin/perl

use strict;
use DBI qw (:sql_types);
use DBD::Pg qw ( :pg_types);

my $dbh = DBI->connect ( 'DBI:Pg:dbname=mydb;' , 'myuser','mypass');

my $sth=$dbh->prepare ("select image from image where id=1");
$sth->execute();
my @row = $sth->fetchrow_array ;

open ( OUT, ">imagefile.png");
print OUT $row[0];

close (OUT);

and that get me imagefile.png

I hope this helps

Leonel

#3Edmund Bacon
ebacon-xlii@onesystem.com
In reply to: John Wells (#1)
Re: Copying bytea data out via pgsql

lnunez@enelserver.com (Leonel Nunez) writes:

John Wells wrote:

Guys,

I have a number of jpegs and tiffs that are stored in a bytea field in a
PostgreSQL database by a Java program using Hibernate.

I need to copy these out to a flat file via pgsql for viewing, etc. I've
tried

psql -c 'select binarydata_field from my_image_table where id=1' mydb >
flatfile

but although that seems to provide the data it does not seem to pull it in
a valid image format. Is there some special handling I need to do here?

You have on the flatfile info about the query
let's say leonel=> select count (*) from image;
count
-------
1
(1 row)

you got fieldname, -------, the image and ( 1 row ) on
the flatfile file

you need to make a script to put the image on that flatfile
just read it as any query and put the contents of that field on the file

I use this little Perl Script

or you could use some of the other options to psql,
e.g

psql -A -t -c "select ..."

From the man page:
-A

--no-align
Switches to unaligned output mode. (The default output mode is
otherwise aligned.)

-t

--tuples-only
Turn off printing of column names and result row count footers,
etc. This is equivalent to the \t command.

You might also want to consider the -o filename option

#4John Wells
jb@sourceillustrated.com
In reply to: Leonel Nunez (#2)
Re: Copying bytea data out via pgsql

Leonel Nunez said:

I hope this helps

Leonel,

Worked perfectly...thanks. I'll do the same thing via Java for my future
use (can't guarantee Perl will be available on all of our target
machines).

I appreciate the help!

John