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

Postgres erkennt keine temporäre Tabelle in Funktion

Postgres führt einige einfache Überprüfungen der Funktion durch, die Sie erstellen möchten, und findet (korrekt), dass die Tabelle work_list existiert (noch) nicht. Ich sehe zwei Optionen:

1. "Fake it until you make it"

Erstellen Sie tatsächlich die (temporäre) Tabelle, bevor Sie die Funktion erstellen. Die temporäre Tabelle ist am Ende der Sitzung verschwunden, aber sobald die Funktion erstellt ist, haben Sie diesen Test endgültig bestanden.
Natürlich müssten Sie diese Tabelle löschen, bevor Sie die Funktion in derselben ausführen Sitzung, um Konflikte zu vermeiden. Besser jedoch:Verwenden Sie CREATE TEMP TABLE IF NOT EXISTS in Ihrer Funktion (Postgres 9.1+). Möglicherweise möchten Sie die Tabelle abschneiden, wenn sie bereits vorhanden ist ...

Allerdings (siehe Kommentare unten) unter Angabe des Handbuchs

Fettdruck von mir.

2. Verwenden Sie stattdessen PL/pgSQL

In plpgsql sind die Prüfungen weniger gründlich. Wenn sich Postgres immer noch beschwert (was in diesem Fall nicht der Fall ist), können Sie auch SQL dynamisch mit EXECUTE ausführen .

Übrigens:In vielen Fällen gibt es eine performantere Lösung ohne temporäre Tabelle um die Ecke ...