pg_dump: Falsche Reihenfolge - abhängige Funktion wird zu spät erstellt

Hi,

ich habe mit dem pg_dump tool einen kompletten SQL-dump eines Datenbankschemas (ohne Daten) erstellt.

Darin wird innerhalb einer Funktion foo() eine andere funktion bar() referenziert, obwohl bar() erst nach foo() erstellt wird. Demzufolge kann ich die Datenbank auch nicht wiederherstellen, es kommt (wie zu erwarten…) nur der Fehler

ERROR:  function bar() does not exist

Für mich sieht das nach einem Bug in pg_dump aus, aber vielleicht übersehe ich ja nur etwas…

Ich verwende pgAdmin 1.16 (Windows). Hoffe ihr könnt mir helfen!

PG kann nicht wirklich wissen, was Du in einer Funktion referenzierst, und prüft das auch nicht:

test=# create or replace function blub() returns int as $$declare c int;begin select into c gibt_es_nicht(); return 1;end$$language plpgsql;
CREATE FUNCTION
test=*#

das merkt er erst bei der Ausführung:

test=*# select * from blub();
ERROR:  function gibt_es_nicht() does not exist
LINE 1: select        gibt_es_nicht()
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  select        gibt_es_nicht()
CONTEXT:  PL/pgSQL function blub() line 1 at SQL statement

vermutlich liegt der Fehler woanders…

Fehler gefunden: Ich hab ein paar von den SET statements am Anfang entfernt

SET check_function_bodies = false;

scheint wichtig zu sein :wink:

Ich finde es schon recht wichtig, den Inhalt von Funktionen bei der Erstellung zu prüfen, dann hagelt es zur Laufzeit nicht so viele Fehler, aber wenn pg_dump das so handhabt… naja