Standaardwaarden worden geparseerd bij het maken (vroege binding!). Wat u ziet in psql, pgAdmin of andere clients is een tekstweergave, maar in feite de OID
van de functie now()
op het moment dat de kolom wordt gemaakt, wordt de standaardwaarde opgeslagen in de systeemcatalogus pg_attrdef
. Ik citeer:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Wanneer u de search_path
, waardoor Postgres de naam van de functie schema-gekwalificeerd weergeeft, aangezien deze niet meer correct zou worden opgelost met het huidige search_path
.
Dumpen en herstellen hebben geen betrekking op uw aangepaste search_path
instelling. Ze stellen het expliciet. Dus wat je ziet is niet gerelateerd aan de dump / restore-cyclus.
Ingebouwde functies overschrijven
public
plaatsen voor pg_catalog
in het search_path
is een hazardspel . Minder bevoorrechte gebruikers (inclusief uzelf) mogen daar vaak schrijven en functies maken die onbedoeld systeemfuncties kunnen overrulen - met willekeurige (of kwaadaardige) gevolgen.
U wilt een speciaal schema met beperkte toegang ingebouwde functies te negeren. Gebruik in plaats daarvan iets als dit:
SET search_path = override, pg_catalog, public;
Details in deze gerelateerd antwoord op dba.SE .