Wartości domyślne są analizowane w czasie tworzenia (wczesne wiązanie!). To, co widzisz w psql, pgAdmin lub innych klientach, to reprezentacja tekstowa, ale w rzeczywistości OID
funkcji now()
w momencie tworzenia kolumny domyślna jest przechowywana w katalogu systemowym pg_attrdef
. Cytuję:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Po zmianie search_path
, co powoduje, że Postgres wyświetla nazwę funkcji zakwalifikowanej do schematu, ponieważ nie byłaby już poprawnie rozwiązana z bieżącą search_path
.
Zrzuty i przywracanie nie dotyczą Twojej niestandardowej search_path
ustawienie. Ustalili to wprost. Więc to, co widzisz, nie jest związane z cyklem zrzutu/przywracania.
Zastąp wbudowane funkcje
Umieszczanie public
przed pg_catalog
w search_path
to gra hazardowa . Nieuprzywilejowani użytkownicy (w tym Ty) często mogą tam pisać i tworzyć funkcje, które mogą nieumyślnie unieważnić funkcje systemowe - z dowolnym (lub złośliwym) wynikiem.
Potrzebujesz dedykowanego schematu z ograniczonym dostępem do zastąpienia funkcji wbudowanych. Zamiast tego użyj czegoś takiego:
SET search_path = override, pg_catalog, public;
Szczegóły w tym powiązana odpowiedź na dba.SE .