sql >> Databáze >  >> RDS >> PostgreSQL

CHYBA PostgreSQL:funkce to_tsvector(znak různý, neznámý) neexistuje

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.



  1. CHYBA:relační místa neexistuje Import Heroku db

  2. Vysvětlení velikosti úložiště „datetimeoffset“ na serveru SQL

  3. Jak nastavím parametry ORDER BY pomocí připraveného příkazu PDO?

  4. Sdílení dat pomocí PostgreSQL 11