Стойностите по подразбиране се анализират по време на създаване (ранно обвързване!). Това, което виждате в psql, pgAdmin или други клиенти, е текстово представяне, но всъщност OID
на функцията now()
към момента на създаване колоната по подразбиране се съхранява в системния каталог pg_attrdef
. Цитирам:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Когато промените search_path
, което кара Postgres да показва името на квалифицираната схема на функцията, тъй като вече няма да бъде разрешено правилно с текущия search_path
.
Изхвърлянето и възстановяването не се отнасят до вашия персонализиран search_path
настройка. Те го определят изрично. Така че това, което виждате, не е свързано с цикъла на дъмп/възстановяване.
Замяна на вградените функции
Поставяне на public
преди pg_catalog
в search_path
е игра на опасност . На потребители в неравностойно положение (включително вас) често е разрешено да пишат там и да създават функции, които могат по невнимание да отменят системните функции - с произволен (или злонамерен) резултат.
Искате специална схема с ограничен достъп за да замените вградените функции. Вместо това използвайте нещо подобно:
SET search_path = override, pg_catalog, public;
Подробности в този свързан отговор на dba.SE .