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

Panggilan fungsi PostgreSQL

Itu ditentukan oleh aturan Resolusi Jenis Fungsi . Penjelasan rinci dalam manual. Terkait:

  • Apakah ada cara untuk menonaktifkan fungsi yang berlebihan di Postgres

NULL tanpa pemeran tipe eksplisit dimulai sebagai tipe "tidak diketahui":

SELECT pg_typeof(NULL)

 pg_typeof
-----------
 unknown

Sebenarnya, Saya curiga dan menjalankan tes cepat, hanya untuk menemukan hasil yang berbeda di Postgres 9.3 dan 9.4. varchar diambil dari integer (yang anehnya bertentangan dengan temuan Anda):

SQL Fiddle.

Menurut saya aturan yang sesuai adalah poin 4e dalam daftar (tidak ada poin sebelumnya yang menentukan pertandingan):

Di setiap posisi, pilih kategori string jika ada kandidat yang menerima kategori tersebut. (Bias terhadap string ini sesuai karena literal tipe tidak dikenal terlihat seperti string.)

Jika Anda menambahkan fungsi lain dengan jenis input text ke campuran yang kelebihan beban, text akan diambil dari varchar .

Secara pribadi saya hampir selalu gunakan text bukannya varchar . Meskipun kompatibel dengan biner (hampir tetapi tidak persis sama), text lebih dekat ke jantung Postgres dalam segala hal.

Saya menambahkan itu ke biola, serta contoh lain di mana Postgres tidak dapat memutuskan dan membuat ulah.

Jika Anda ingin memilih fungsi tertentu, tambahkan pemeran tipe eksplisit (itulah caranya!):

select test(null::int)     AS func_int
     , test(null::varchar) AS func_vc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menjalankan Gudang Data di PostgreSQL

  2. Indeks PostgreSQL tidak digunakan untuk kueri pada rentang IP

  3. Bagaimana KECUALI Bekerja di PostgreSQL

  4. Menyortir pohon dengan jalur terwujud?

  5. Cara membuat pengguna dengan PSQL