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.e
betyder endast som en explicit cast (medCAST
eller::
syntax).a
betyder implicit i tilldelning till en målkolumn, såväl som explicit.i
betyder implicit i uttryck, såväl som de andra fallen.
Läs mer om de tre olika typerna av uppdrag i kapitlet SKAPA CAST.