Nilai default diuraikan pada waktu pembuatan (pengikatan awal!). Apa yang Anda lihat di psql, pgAdmin atau klien lain adalah representasi teks tetapi, pada kenyataannya, OID
dari fungsi now()
pada saat membuat kolom default disimpan dalam katalog sistem pg_attrdef
. Saya mengutip:
adbin pg_node_tree The internal representation of the column default value
adsrc text A human-readable representation of the default value
Saat Anda mengubah search_path
, yang menyebabkan Postgres menampilkan nama fungsi yang memenuhi syarat skema, karena itu tidak akan diselesaikan dengan benar lagi dengan search_path
saat ini .
Buang dan pulihkan tidak terkait dengan search_path
khusus Anda pengaturan. Mereka mengaturnya secara eksplisit. Jadi apa yang Anda lihat tidak terkait dengan siklus dump / restore.
Mengganti fungsi bawaan
Menempatkan public
sebelum pg_catalog
di search_path
adalah permainan bahaya . Pengguna yang kurang beruntung (termasuk Anda sendiri) sering kali diizinkan untuk menulis di sana dan membuat fungsi yang mungkin secara tidak sengaja mengesampingkan fungsi sistem - dengan hasil yang berubah-ubah (atau berbahaya).
Anda menginginkan skema khusus dengan akses terbatas untuk mengganti fungsi bawaan. Gunakan sesuatu seperti ini sebagai gantinya:
SET search_path = override, pg_catalog, public;
Detail dalam jawaban terkait di dba.SE .