PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kapan / bagaimana fungsi ekspresi nilai default terikat dengan search_path?

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql - dapatkan baris datetime terdekat relatif terhadap nilai datetime yang diberikan

  2. Pengecualian dalam JPA saat menggunakan file benih untuk PostgreSQL

  3. Bagaimana cara membuat file permanen di Heroku?

  4. Fungsi PostgreSQL / Prosedur Tersimpan CURRENT_TIMESTAMP tidak berubah

  5. Gabungkan trigram dengan pencarian peringkat di Django 1.10