Použijte explicitní typ přetypování:
SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;
Nebo změňte sloupec languages.language
zadejte regconfig
. Viz odpověď @Swav.
Proč?
Postgres umožňuje přetížení funkcí. Signatury funkcí jsou definovány jejich (volitelně schématem -kvalifikovaný) jméno plus (seznam) typ vstupního parametru (s). Dvouparametrová forma to_tsvector()
očekává typ regconfig
jako první parametr:
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
Pokud žádná existující funkce neodpovídá přesně , pravidla rozlišení funkčních typů rozhodují o nejlepší shodě – pokud existuje. To je úspěšné pro to_tsvector('english', 'hello world')
, s 'english'
je netypizovaný řetězcový literál . Ale selže s parametrem zadaným varchar
, protože není registrován žádný implicitní přenést z varchar
do regconfig
. Manuál:
Zahoďte kandidátské funkce, pro které se typy vstupu neshodují a nelze je převést (pomocí implicitního konverze), aby odpovídaly. neznámé literály předpokládá se, že jsou pro tento účel konvertibilní na cokoli.
Odvážné zdůraznění min.
Zaregistrovaní přenášejí 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
Vysvětlení pro castcontext
:
castcontext char
Udává, v jakých kontextech lze přetypování vyvolat.e
znamená pouze jako explicitní obsazení (pomocíCAST
nebo::
syntax).a
znamená implicitně v přiřazení k cílovému sloupci, stejně jako explicitně.i
znamená implicitně ve výrazech, stejně jako v ostatních případech.
Přečtěte si více o třech různých typech úkolu v kapitole VYTVOŘIT OBSAH.