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.eznamená pouze jako explicitní obsazení (pomocíCASTnebo::syntax).aznamená implicitně v přiřazení k cílovému sloupci, stejně jako explicitně.iznamená 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.