plsh set zurückgeben

Kann man aus einer Funktion in plsh ein set zurückgeben?
Folgendes habe ich versucht:

postgres@postgresql ~ $ echo 'abc' >> test.txt
postgres@postgresql ~ $ echo 'efg'>> test.txt



CREATE OR REPLACE FUNCTION shtest()
RETURNS setof text AS
$BODY$
#!/bin/sh

cd /var/lib/postgresql
cat test.txt
exit 0

$BODY$
LANGUAGE 'plsh' VOLATILE;



db=# select * from shtest();

 shtest
--------
 abc
 efg
(1 Zeile)

Sieht zunächst ganz gut aus, ist aber nur eine Zeile.
Oder anders:

db=# create table test (s1 text);
CREATE TABLE
db=# insert into test select * from shtest();
INSERT 0 1
db=# select * from test;
 s1
-----
 abc
 efg
(1 Zeile)

Ich hätte aber gern eine Tabellenzeile pro Dateizeile.

Vermutlich nicht, es nimmt das, was die Shell rückliefert, als einen Antwort-Text auf.

Aber Dir kann geholfen werden: zerteile den Text an den Zeilenenden, diese URL hier könnte Dir hilfreich sein:

http://archives.postgresql.org/pgsql-general/2005-12/msg00080.php



Andreas

Coole Sache das, danke.

Nun noch eine Frage:
Wie kann ich jetzt die Rückgabe von shtest() an Parameter 1 von split_to_row(text,text) übergeben ohne es in eine weitere Prozedur zu packen?

Ich komme ja von MSSQL und da deklariert man am Anfang eines Scripes oder Batches ein paar Variablen, über welche man dann die Werte übergibt oder auch verändert. Aber in Postgres kann man Variablen wohl nur in Funktionen verwenden.

Mit dem Umschreiben einiger Funktionen von MSSQL nach Postgres bin ich schon recht gut vorwärts gekommen. Aber was reine Scripte betrifft (welche ich recht häufig für Administration, Reporting usw. benutze), da habe ich generell noch das Problem wie man die Ergebnisse eines Schrittes in an den nächsten übergibt. Vielleicht könnt ihr mir hier mal auf den Sprung helfen.

ungetestet:

select split_to_row(shtext(), text);

einfach einsetzen…


Andreas