sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL FEJL:funktion to_tsvector (tegn varierende, ukendt) eksisterer ikke

Brug en eksplicit type cast:

SELECT language, to_tsvector(language::regconfig, 'hello world') FROM languages;

Eller skift kolonnen languages.language for at skrive regconfig . Se @Swavs svar.

Hvorfor?

Postgres tillader funktionsoverbelastning. Funktionssignaturer er defineret af deres (valgfrit skema -kvalificeret) navn plus (listen over) input parametertype (s). Den 2-parameter form af to_tsvector() forventer typen regconfig som første 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

Hvis ingen eksisterende funktion matcher nøjagtigt , reglerne for funktionstypeopløsning bestemmer det bedste match - hvis nogen. Dette er lykkedes for to_tsvector('english', 'hello world') , med 'english' være en utypestrenget bogstavelig . Men fejler med en parameter indtastet varchar , fordi der ikke er nogen registreret implicit cast fra varchar til regconfig . Manualen:

Kassér kandidatfunktioner, for hvilke inputtyperne ikke stemmer overens og ikke kan konverteres (ved hjælp af en implicit konvertering) for at matche. ukendte bogstaver antages at kunne konverteres til hvad som helst til dette formål.

Fed fremhævelse mine.
De registrerede casts til 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

Forklaring på castcontext :

castcontext char
Indikerer, hvilke sammenhænge rollebesætningen kan påberåbes i. e betyder kun som en eksplicit cast (ved hjælp af CAST eller :: syntaks). a betyder implicit i tildeling til en målkolonne, såvel som eksplicit. i betyder implicit i udtryk, såvel som de andre tilfælde.

Læs mere om de tre forskellige opgavetyper i kapitlet OPRET CAST.



  1. Aggregering af data ved hjælp af gruppefunktioner (grupper efter orakel)

  2. Hvad er begrænsningerne for MS Access?

  3. Sådan finder du standardfilplaceringen for datafiler og logfiler i SQL Server

  4. Sådan ændres sproget for din Oracle-session