sql Skript über PL/pgSQL ausführen

Hey,

ich steh irgendwie gerade neben mir. Ich möchte ein sql Skript über PL/pgSQL ausführen und bekomme immer einen Syntaxfehler bei der Option \i zum Ausführen eines Skriptes. Es liegt am backslash, doch weis ich nicht wie ich den im String darstellen soll. Müsste doch eigentlich mittels \ gehen, oder?

EXECUTE '\\i S:/Skripte/sql/Schemaimport/datei.sql' ;

mfg
Marcus

\i ist eine psql Option. Nichts, was du in einer Funktion verwenden kannst.



kretschmer@tux:~$ psql test
psql (8.4.1)
Type "help" for help.

test=# \t
Showing only tuples.
test=# \o mein_sql.sql
test=# select 'select version()';
test=*# \o
test=*# \i mein_sql.sql
 PostgreSQL 8.4.1 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2, 32-bit

Andreas

EXECUTEist nicht EXECUTE

Hi Andreas,

man bist du schnell. Kaum hat ich das Thema erstellt und schon die Antwort…wow.

Über psql kann ich die Datei auch ausführen, aber über eine PL/pgSQL Funktion und EXECUTE ‘…’ funktioniert es nicht.

mfg
Marcus

psql ist es erlaubt, die angegebene Datei einzulesen.

pl/pgSQL hat keinerlei Möglichkeit, auf Dateien zuzugreifen. Das \i funktioniert nur in psql und zwar nur auf der Konsole in psql, nicht gekapselt in irgendwelche anderen Befehle.

Was wolltest du uns jetzt mit zwei gleichen Links sagen, die noch dazu nichts zum Thema beitragen? :wink:

g

Andreas

Okay, das leuchtet ein. Besteht über PL/pgSQL selbst die Möglichkeit ein Skript auszuführen oder zu importieren? Meine Idee wäre jetzt, die Datei in einen varchar zu packen und dann diese auszuführen über das EXECUTE Statement.

mfg
Marcus

Aus einer Tabelle heraus? Ja, das geht.

Andreas

Vielleicht betrachte ich die Sache auch als viel zu kompliziert.
Was ich eigentlich möchte ist, dass zu Beginn einer Session immer die temporären Tabellen angelegt werden. Dies soll über ein Funktion realisiert werden.
Gibt es da eine bequemere Art dies zu tun?

mfg
Marcus

Wozu ist das gut?

Dies soll über ein Funktion realisiert werden.
Gibt es da eine bequemere Art dies zu tun?

mfg
Marcus

Ja, z.B., und diese Funktion halt aufrufen. Automatisiert bei Start einer Session geht das wohl nicht.

Andreas

:wink: … mehr EXECUTE fuer alle?

Leider.

ON CONNECT Trigger wären schön …

Wow … das ist man von Dir garnicht gewöhnt - soviel Pragmatismus :wink:

Meine Wunschliste:

CREATE TRIGGER ON … BEFORE/ABFTER BEGIN …
CREATE TRIGGER ON … BEFORE/ABFTER COMMIT …
CREATE TRIGGER ON … BEFORE/ABFTER ROLLBACK …