Utilice una conversión de tipos explícita:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
O cambie la columna languages.language
para escribir regconfig
. Ver la respuesta de @Swav.
¿Por qué?
Postgres permite la sobrecarga de funciones. Las firmas de función se definen por su (opcionalmente esquema -calificado) nombre más (la lista de) tipo de parámetro de entrada (s). La forma de 2 parámetros de to_tsvector()
espera tipo regconfig
como primer parámetro:
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
Si ninguna función existente coincide exactamente , las reglas de resolución de tipo de función deciden cuál es la mejor coincidencia, si la hay. Esto es exitoso para to_tsvector('english', 'hello world')
, con 'english'
siendo un literal de cadena sin tipo . Pero falla con un parámetro escrito varchar
, porque no hay ningún implícito registrado emitir desde varchar
a regconfig
. El manual:
Descartar funciones candidatas para las cuales los tipos de entrada no coinciden y no se pueden convertir (usando un implícito conversión) para que coincida. literales desconocidos se supone que son convertibles a cualquier cosa para este propósito.
Énfasis en negrita mío.
Las conversiones registradas para 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
Explicación para castcontext
:
castcontext char
Indica en qué contextos se puede invocar el elenco. e
significa solo como un lanzamiento explícito (usando CAST
o ::
sintaxis). a
significa implícitamente en la asignación a una columna de destino, así como explícitamente. i
significa implícitamente en expresiones, así como los demás casos.
Más información sobre los tres tipos de tareas diferentes en el capítulo CREAR REPARTO.