Standardværdier parses på oprettelsestidspunktet (tidlig binding!). Det du ser i psql, pgAdmin eller andre klienter er en tekstrepræsentation, men faktisk OID
af funktionen now()
på tidspunktet for oprettelse af kolonnen er standard gemt i systemkataloget pg_attrdef
. Jeg citerer:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Når du ændrer search_path
, der får Postgres til at vise navnet på funktionen skema-kvalificeret, da det ikke længere ville blive løst korrekt med den aktuelle search_path
.
Dump og gendannelse handler ikke om din tilpassede search_path
indstilling. De sætter det eksplicit. Så det, du ser, er ikke relateret til dump-/gendannelsescyklussen.
Tilsidesæt indbyggede funktioner
Placering public
før pg_catalog
i search_path
er et hazardspil . Underprivilegerede brugere (inklusive dig selv) får ofte lov til at skrive der og oprette funktioner, der utilsigtet kan tilsidesætte systemfunktioner - med vilkårligt (eller ondsindet) resultat.
Du vil have et dedikeret skema med begrænset adgang til at tilsidesætte indbyggede funktioner. Brug noget som dette i stedet:
SET search_path = override, pg_catalog, public;
Detaljer i denne relateret svar på dba.SE .