sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL FEL:funktion to_tsvector (tecken varierar, okänt) finns inte

Använd en explicit typcast:

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

Eller ändra kolumnen languages.language för att skriva regconfig . Se @Swavs svar.

Varför?

Postgres tillåter funktionsöverbelastning. Funktionssignaturer definieras av deras (valfritt schema). -qualified) namn plus (listan över) indataparametertyp (s). 2-parametersformen för to_tsvector() förväntar sig typen regconfig som första 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

Om ingen befintlig funktion matchar exakt , reglerna för funktionstypupplösning avgör den bästa matchningen - om någon. Detta lyckades för to_tsvector('english', 'hello world') , med 'english' är en oskriven sträng bokstavlig . Men misslyckas med en parameter skriven varchar , eftersom det inte finns någon registrerad implicit cast från varchar till regconfig . Manualen:

Släng kandidatfunktioner för vilka indatatyperna inte matchar och inte kan konverteras (med en implicit konvertering) för att matcha. okända bokstäver antas vara konvertibla till vad som helst för detta ändamål.

Fet betoning min.
De registrerade casts för 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

Förklaring till castcontext :

castcontext char
Anger i vilka sammanhang skådespelaren kan åberopas. e betyder endast som en explicit cast (med CAST eller :: syntax). a betyder implicit i tilldelning till en målkolumn, såväl som explicit. i betyder implicit i uttryck, såväl som de andra fallen.

Läs mer om de tre olika typerna av uppdrag i kapitlet SKAPA CAST.



  1. Hur gör man:Rengör en mysql InnoDB-lagringsmotor?

  2. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer

  3. Oracle LIMIT n,m ekvivalent

  4. Hur CONVERT_TZ() fungerar i MariaDB