Výchozí hodnoty jsou analyzovány při vytváření (předčasná vazba!). To, co vidíte v psql, pgAdmin nebo jiných klientech, je textová reprezentace, ale ve skutečnosti je to OID
funkce now()
v době vytváření sloupce je výchozí hodnota uložena v systémovém katalogu pg_attrdef
. Cituji:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Když změníte search_path
, což způsobí, že Postgres zobrazí název funkce kvalifikované podle schématu, protože by již nebyla správně vyřešena s aktuální search_path
.
Výpis a obnovení se netýkají vaší vlastní search_path
nastavení. Stanovili to explicitně. Takže to, co vidíte, nesouvisí s cyklem výpisu/obnovení.
Přepsat vestavěné funkce
Umístění public
před pg_catalog
v search_path
je hra hazardu . Neprivilegovaní uživatelé (včetně vás) tam často mohou psát a vytvářet funkce, které mohou neúmyslně potlačit systémové funkce – s libovolným (nebo škodlivým) výsledkem.
Chcete vyhrazené schéma s omezeným přístupem k přepsání vestavěných funkcí. Místo toho použijte něco takového:
SET search_path = override, pg_catalog, public;
Podrobnosti v tomto související odpověď na dba.SE .