PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gibt es so etwas wie eine Temp-Funktion?

Es gibt keine CREATE TEMP FUNCTION ... wie das bestehende CREATE TEMP TABLE ... . Aber es gibt den Trick, eine Funktion im temporären Schema pg_temp zu erstellen , wie die verlinkte Antwort bereitstellt . Die Funktion ist nur innerhalb derselben Sitzung sichtbar und kann nur mit dem Schema-qualifizierten Namen aufgerufen werden:

CREATE FUNCTION pg_temp.f_inc(int)
  RETURNS int AS 'SELECT $1 + 1' LANGUAGE sql IMMUTABLE;

SELECT pg_temp.f_inc(42);
f_inc
-----
43

Ich konnte die Idee auf diesen Beitrag von Tom Lane zurückführen pgsql-allgemein .

Am ehesten ohne Tricks wäre ein vorbereitetes Statement . Verhält sich ähnlich wie eine temporäre SQL-Funktion das stirbt am Ende der Sitzung. Nicht dasselbe Ding jedoch und kann nur für sich allein verwendet werden, nicht im Kontext einer größeren Abfrage. Beispiel:

PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;

Aufruf:

EXECUTE upd_tbl(123, 'foo_name');

Einzelheiten: