Thread: How to get text for a plpgsql variable from a file.
Hello, I need a long text form from a file in my plpgsql variable. Can anyone think of a more straightforward way to read the file than the following: CREATE FUNCTION test() RETURNS void AS $BODY$ DECLARE mytxt text; BEGIN CREATE TEMP TABLE x (x text); COPY x from '/path/to/myfile.txt'; mytxt := (SELECT x from x); ... END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; Regards Erwin
hello look on orafce from pgfoundry. There modul utl_file http://www.postgres.cz/index.php/Oracle_functionality_%28en%29#UTL_FILE Regards Pavel Stehule 2009/12/16 Erwin Brandstetter <brsaweda@gmail.com>: > Hello, > > I need a long text form from a file in my plpgsql variable. > Can anyone think of a more straightforward way to read the file than > the following: > > > CREATE FUNCTION test() RETURNS void AS > $BODY$ > DECLARE > mytxt text; > BEGIN > > CREATE TEMP TABLE x (x text); > COPY x from '/path/to/myfile.txt'; > mytxt := (SELECT x from x); > > ... > > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE; > > > > Regards > Erwin > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >
On Dec 16, 10:47 pm, pavel.steh...@gmail.com (Pavel Stehule) wrote: > hello > > look on orafce from pgfoundry. There modul utl_file > > http://www.postgres.cz/index.php/Oracle_functionality_%28en%29#UTL_FILE Thanks Pavel, that should do the trick. I assume then, there is no easier built-in way in standard postgres? Regrads Erwin
2009/12/17 Erwin Brandstetter <brsaweda@gmail.com>: > On Dec 16, 10:47 pm, pavel.steh...@gmail.com (Pavel Stehule) wrote: >> hello >> >> look on orafce from pgfoundry. There modul utl_file >> >> http://www.postgres.cz/index.php/Oracle_functionality_%28en%29#UTL_FILE > > > Thanks Pavel, that should do the trick. > > I assume then, there is no easier built-in way in standard postgres? > PostgreSQL 8.3 and higher can read file from pg data directory. That is all Regards Pavel > > Regrads > Erwin > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >
-----BEGIN PGP SIGNED MESSAGE----- Hash: RIPEMD160 NotDashEscaped: You need GnuPG to verify this message > I need a long text form from a file in my plpgsql variable. > Can anyone think of a more straightforward way to read the file than > the following: Sounds like a job for an 'untrusted' procedural language. Here's a quick example using plperlu: === \t \o /tmp/gtest SELECT 'OH HAI'; \o \t CREATE OR REPLACE FUNCTION read_file(TEXT) RETURNS TEXT LANGUAGE plperlu AS $bc$ use strict; use warnings; my $filename = shift; index($filename, '/') and die qq{File name must be an absolute path\n}; open my $fh, '<', $filename or die qq{Could not open file "$filename": $!\n}; my $string; { local $/; $string = <$fh>; } close $fh or die qq{Could not close file "$filename": $!\n}; return $string; $bc$; CREATE OR REPLACE FUNCTION gtest() RETURNS TEXT LANGUAGE plpgsql AS $bc$ DECLARE external_file_contents TEXT; BEGIN SELECT INTO external_file_contents read_file('/tmp/gtest'); RETURN 'GOT:' || external_file_contents; END $bc$; SELECT gtest(); === Piping all of the above into psql gives: Output format is unaligned. Showing only tuples. Tuples only is off. Output format is aligned. CREATE FUNCTION CREATE FUNCTION gtest ------------ GOT:OH HAI -- Greg Sabino Mullane greg@turnstep.com End Point Corporation http://www.endpoint.com/ PGP Key: 0x14964AC8 200912170920 http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8 -----BEGIN PGP SIGNATURE----- iEYEAREDAAYFAksqPrkACgkQvJuQZxSWSsgjFACfebEHE6rLGs04w6mptctG7nuI IXwAoJmLOwavrXyaU+4lHx3OsIws4JOc =58sb -----END PGP SIGNATURE-----
On Dec 16, 2009, at 11:19 AM, Erwin Brandstetter wrote: > Hello, > > I need a long text form from a file in my plpgsql variable. > Can anyone think of a more straightforward way to read the file than > the following: > > > CREATE FUNCTION test() RETURNS void AS > $BODY$ > DECLARE > mytxt text; > BEGIN > > CREATE TEMP TABLE x (x text); > COPY x from '/path/to/myfile.txt'; > mytxt := (SELECT x from x); > > ... > > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE; If you're allowed, you can use an untrusted procedural language. Erik Jones, Database Administrator Engine Yard Support, Scalability, Reliability 866.518.9273 x 260 Location: US/Pacific IRC: mage2k