Standardvärden analyseras vid skapandet (tidig bindning!). Det du ser i psql, pgAdmin eller andra klienter är en textrepresentation men i själva verket OID
av funktionen now()
vid tidpunkten för att skapa kolumnen lagras standard i systemkatalogen pg_attrdef
. Jag citerar:
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 ändrar search_path
, som gör att Postgres visar namnet på funktionen schemakvalificerad, eftersom det inte skulle lösas korrekt längre med den nuvarande search_path
.
Dumpning och återställning handlar inte om din anpassade search_path
miljö. De anger det uttryckligen. Så det du ser är inte relaterat till dumpnings-/återställningscykeln.
Åsidosätt inbyggda funktioner
Placera public
före pg_catalog
i search_path
är ett hazardspel . Underprivilegierade användare (inklusive du själv) tillåts ofta skriva där och skapa funktioner som oavsiktligt kan åsidosätta systemfunktioner - med godtyckliga (eller skadliga) resultat.
Du vill ha ett dedikerat schema med begränsad åtkomst för att åsidosätta inbyggda funktioner. Använd något sånt här istället:
SET search_path = override, pg_catalog, public;
Detaljer i denna relaterat svar på dba.SE .