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 (menggunakanCAST
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.