Gebruik een expliciete typecast:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
Of wijzig de kolom languages.language
om regconfig
. te typen . Zie het antwoord van @Swav.
Waarom?
Postgres maakt overbelasting van functies mogelijk. Functiehandtekeningen worden gedefinieerd door hun (optioneel schema -gekwalificeerd) naam plus (de lijst van) type invoerparameter (s). De 2-parametervorm van to_tsvector()
verwacht type regconfig
als eerste 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
Als geen bestaande functie exact overeenkomt , bepalen de regels van Function Type Resolution de beste match - indien aanwezig. Dit is gelukt voor to_tsvector('english', 'hello world')
, met 'english'
een niet-getypeerde tekenreeks zijn . Maar mislukt met een parameter getypt varchar
, omdat er geen impliciete . is geregistreerd cast van varchar
naar regconfig
. De handleiding:
Gooi kandidaatfuncties weg waarvoor de invoertypen niet overeenkomen en die niet kunnen worden geconverteerd (met een impliciete conversie) overeenkomen. onbekende letterlijke worden verondersteld om te zetten in iets voor dit doel.
Vetgedrukte nadruk van mij.
De geregistreerde casts voor 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
Uitleg voor castcontext
:
castcontext char
Geeft aan in welke contexten de cast kan worden aangeroepen. e
betekent alleen als een expliciete cast (met behulp van CAST
of ::
syntaxis). a
betekent zowel impliciet in toewijzing aan een doelkolom als expliciet. i
betekent impliciet in uitdrukkingen, evenals de andere gevallen.
Lees meer over de drie verschillende soorten opdrachten in het hoofdstuk CREER CAST.