Standardwerte werden zum Zeitpunkt der Erstellung geparst (frühes Binden!). Was Sie in psql, pgAdmin oder anderen Clients sehen, ist eine Textdarstellung, aber tatsächlich die OID
der Funktion now()
zum Zeitpunkt der Erstellung wird die Spalte default im Systemkatalog gespeichert pg_attrdef
. Ich zitiere:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Wenn Sie den search_path
, was dazu führt, dass Postgres den Namen der Funktion schemaqualifiziert anzeigt, da er mit dem aktuellen search_path
nicht mehr korrekt aufgelöst würde .
Dump und Restore haben nichts mit Ihrem benutzerdefinierten search_path
zu tun Einstellung. Sie setzen es explizit. Was Sie also sehen, hat nichts mit dem Dump/Restore-Zyklus zu tun.
Integrierte Funktionen überschreiben
Platzieren von public
vor pg_catalog
im search_path
ist ein Gefahrenspiel . Unterprivilegierten Benutzern (einschließlich Ihnen selbst) ist es oft erlaubt, dort zu schreiben und Funktionen zu erstellen, die versehentlich Systemfunktionen außer Kraft setzen können - mit willkürlichem (oder böswilligem) Ergebnis.
Sie möchten ein dediziertes Schema mit eingeschränktem Zugriff integrierte Funktionen zu überschreiben. Verwenden Sie stattdessen so etwas:
SET search_path = override, pg_catalog, public;
Details in diesem verwandte Antwort auf dba.SE .