Usa un cast di tipo esplicito:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
Oppure cambia la colonna languages.language
per digitare regconfig
. Vedi la risposta di @Swav.
Perché?
Postgres consente il sovraccarico delle funzioni. Le firme delle funzioni sono definite dal loro (facoltativamente schema -qualificato) nome più (l'elenco di) tipo di parametro di input (S). La forma a 2 parametri di to_tsvector()
si aspetta il tipo regconfig
come primo parametro:
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
Se nessuna funzione esistente corrisponde esattamente , le regole di Function Type Resolution decidono la migliore corrispondenza, se presente. Questo ha successo per to_tsvector('english', 'hello world')
, con 'english'
essendo una stringa letterale non tipizzata . Ma non riesce con un parametro digitato varchar
, perché non ci sono impliciti registrati trasmesso da varchar
a regconfig
. Il manuale:
Elimina le funzioni candidate per le quali i tipi di input non corrispondono e non possono essere convertite (usando un implicito conversione) da abbinare. letterali sconosciuti si presume siano convertibili in qualsiasi cosa per questo scopo.
Il grassetto è mio.
I cast registrati per 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
Spiegazione per castcontext
:
castcontext char
Indica in quali contesti è possibile richiamare il cast. e
significa solo come cast esplicito (usando CAST
o ::
sintassi). a
significa implicitamente nell'assegnazione a una colonna di destinazione, così come esplicitamente. i
significa implicitamente nelle espressioni, così come negli altri casi.
Ulteriori informazioni sui tre diversi tipi di assegnazione nel capitolo CREA CAST.