Use uma conversão de tipo explícito:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
Ou altere a coluna
languages.language
para digitar regconfig
. Veja a resposta do @Swav. Por quê?
O Postgres permite a sobrecarga de funções. As assinaturas de funções são definidas por seus (opcionalmente esquema -qualificado) nome mais (a lista de) tipo de parâmetro de entrada (s). A forma de 2 parâmetros de
to_tsvector()
espera o tipo regconfig
como primeiro 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
Se nenhuma função existente corresponder exatamente , as regras de Function Type Resolution decidem a melhor correspondência - se houver. Isso é bem-sucedido para
to_tsvector('english', 'hello world')
, com 'english'
sendo um literal de string não tipado . Mas falha com um parâmetro digitado varchar
, porque não há registro implícito converter de varchar
para regconfig
. O manual:
Descarte funções candidatas para as quais os tipos de entrada não correspondem e não podem ser convertidos (usando uma função implícita conversão) para corresponder. literais desconhecidos são considerados conversíveis para qualquer coisa para este propósito.
A ênfase em negrito é minha.
Os casts registrados 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
Explicação para
castcontext
:
castcontext char
Indica em quais contextos o cast pode ser invocado.e
significa apenas como uma conversão explícita (usandoCAST
ou::
sintaxe).a
significa implicitamente na atribuição a uma coluna de destino, bem como explicitamente.i
significa implicitamente nas expressões, assim como nos demais casos.
Leia mais sobre os três diferentes tipos de atribuição no capítulo CRIAR ELENCO.