Ausführen eines Kopierbefehls in PL/pgSQL

Hallo,
ist es möglich, einen Kopierbefehl innerhalb einer Procedure auszuführen?

Bsp:

declare
path varchar(256);
begin
select file_path into path from tabFile where id=11111;

–unix command
cp path /tmp
end

Wie kann ein externes Programm aufgerufen werden?
Gruß
Chris

Mit jeder serverseitigen Programmiersprache, die als Untrusted definiert ist.

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CREATE LANGUAGE

nein - es sei denn du benutzt eine andere sprache (andere language handler) und schaltest … security-dingens UNSTRUSTED … ab …

mit Pq/PLsql jet dat nüsch . o O (glaub ich)

Fast. Nicht “ab”, sondern die Sprache muss als Untrusted definiert sein.


mit Pq/PLsql jet dat nüsch . o O (glaub ich)

Richtig. Ole!

ah - man koennte also Pq/plsql einfach noch mal CREATEn als “andere” sprache - nur UNTRUSTED ? - auch schoen

Für UNIX-Shell-Dinge bietet sich plsh an, soll es mehr portabel sein, pl/perlU.
Aber mit plpgsql geht es nicht.

Andreas

Nein.


Bitte informier dich.

Hmm - es deutet nichts darauf hin, dass es nicht funktionieren sollte:

CREATE PROCEDURAL LANGUAGE 'plpgsqlU'
  HANDLER plpgsql_call_handler
  VALIDATOR plpgsql_validator;

Ich experimentiere aber noch

Ich hatte das schonmal mit pl/Java gemacht - da benoetigte ich eine UNTRUSTED variante - und funktionierte …

Das Problem wird letztendlich bei Pq/plsql sein, dass es keine Funktionalitaet unterstuetzt um externe Funktionen aufzurufen?!

Richtig.

pl/pgSQL liegt nur als Trusted Variante vor.

Hallo,
vielen Dank für die Antworten.
Habe zuerst mit dem Befehl COPY “http://www.postgresql.org/docs/8.3/interactive/sql-copy.html” gearbeitet. Allerdings muss der DB-User superuser-Rechte besitzen. Die möchte ich aber nicht zuweisen.

Bis jetzt habe ich auch noch keine Lösung gefunden. Möchte aber PL/pgSQL weiter verwenden.

Gruß
CM

Andere Baustelle. Dieser Befehl macht was völlig anderes.


Bis jetzt habe ich auch noch keine Lösung gefunden. Möchte aber PL/pgSQL weiter verwenden.

Gruß
CM

Das ist kein Ausschluß. Schreibe Dir in z.B. plsh eine Function, die Du dann in plpgsql aufrufen kannst.

Aber Du solltest beachten:

man sollte in der DB Dinge tun, die was mit den Daten INNERHALB der DB zu tun haben. Nicht mit externen Daten hantieren, Du hast keine Kontrolle mehr, ob das funktioniert, keine Transaktionen etc.


Andreas