Använd en explicit typcast:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
Eller ändra kolumnen languages.language för att skriva regconfig . Se @Swavs svar.
Varför?
Postgres tillåter funktionsöverbelastning. Funktionssignaturer definieras av deras (valfritt schema). -qualified) namn plus (listan över) indataparametertyp (s). 2-parametersformen för to_tsvector() förväntar sig typen regconfig som första parameter:
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
Om ingen befintlig funktion matchar exakt , reglerna för funktionstypupplösning avgör den bästa matchningen - om någon. Detta lyckades för to_tsvector('english', 'hello world') , med 'english' är en oskriven sträng bokstavlig . Men misslyckas med en parameter skriven varchar , eftersom det inte finns någon registrerad implicit cast från varchar till regconfig . Manualen:
Släng kandidatfunktioner för vilka indatatyperna inte matchar och inte kan konverteras (med en implicit konvertering) för att matcha. okända bokstäver antas vara konvertibla till vad som helst för detta ändamål.
Fet betoning min.
De registrerade casts för 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
Förklaring till castcontext :
castcontext char
Anger i vilka sammanhang skådespelaren kan åberopas.ebetyder endast som en explicit cast (medCASTeller::syntax).abetyder implicit i tilldelning till en målkolumn, såväl som explicit.ibetyder implicit i uttryck, såväl som de andra fallen.
Läs mer om de tre olika typerna av uppdrag i kapitlet SKAPA CAST.