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

PostgreSQL ERROR:fungsi to_tsvector (karakter bervariasi, tidak diketahui) tidak ada

Gunakan pemeran tipe eksplisit:

SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;

Atau ganti kolom languages.language untuk mengetik regconfig . Lihat jawaban @Swav.

Mengapa?

Postgres memungkinkan fungsi overloading. Tanda tangan fungsi ditentukan oleh (opsional skema -memenuhi syarat) nama plus (daftar) tipe parameter input (s). Bentuk 2 parameter dari to_tsvector() mengharapkan jenis regconfig sebagai parameter pertama:

SELECT proname, pg_get_function_arguments(oid)
FROM   pg_catalog.pg_proc
WHERE  proname = 'to_tsvector'

   proname   | pg_get_function_arguments
-------------+---------------------------
 to_tsvector | text
 to_tsvector | regconfig, text             -- you are here

Jika tidak ada fungsi yang ada yang sama persis , aturan Resolusi Jenis Fungsi memutuskan kecocokan terbaik - jika ada. Ini berhasil untuk to_tsvector('english', 'hello world') , dengan 'english' menjadi literal string yang tidak diketik . Tapi gagal dengan parameter ketik varchar , karena tidak ada implisit registered yang terdaftar dilemparkan dari varchar ke regconfig . Panduan:

Buang fungsi kandidat yang jenis inputnya tidak cocok dan tidak dapat dikonversi (menggunakan implisit konversi) untuk mencocokkan. literal tidak diketahui diasumsikan dapat diubah menjadi apa pun untuk tujuan ini.

Penekanan saya yang berani.
Pemain yang terdaftar untuk regconfig :

SELECT castsource::regtype, casttarget::regtype, castcontext
FROM   pg_catalog.pg_cast
WHERE  casttarget = 'regconfig'::regtype;

 castsource | casttarget | castcontext
------------+------------+-------------
 oid        | regconfig  | i
 bigint     | regconfig  | i
 smallint   | regconfig  | i
 integer    | regconfig  | i

Penjelasan untuk castcontext :

castcontext char
Menunjukkan konteks apa yang dapat dipanggil oleh pemeran. e berarti hanya sebagai pemeran eksplisit (menggunakan CAST atau :: sintaksis). a berarti secara implisit dalam penugasan ke kolom target, serta secara eksplisit. i berarti secara implisit dalam ekspresi, serta kasus lainnya.

Baca lebih lanjut tentang tiga jenis tugas yang berbeda di bab BUAT PEMAIN.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda mengubah pengkodean karakter dari database postgres?

  2. Apa cara yang tepat untuk menggunakan modul postgresql node.js?

  3. apa cara yang baik untuk pecahan horizontal di postgresql

  4. Daftar semua tabel di postgresql information_schema

  5. Mengelola Ketersediaan Tinggi PostgreSQL – Bagian I:Kegagalan Otomatis PostgreSQL