PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

ГРЕШКА в PostgreSQL:функция to_tsvector(променлив знак, неизвестен) не съществува

Използвайте изрично прехвърляне на тип:

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

Или променете колоната languages.language за да въведете regconfig . Вижте отговора на @Swav.

Защо?

Postgres позволява претоварване на функциите. Сигнатурите на функциите се дефинират от тяхната (по избор схема -квалифициран) име плюс (списъкът с) тип на входния параметър (с). Формата с 2 параметъра на to_tsvector() очаква тип regconfig като първи параметър:

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

Ако няма съществуваща функция точно , правилата за разделителна способност на типа функция определят най-доброто съвпадение - ако има такова. Това е успешно за to_tsvector('english', 'hello world') , с 'english' е невписан литерал на низ . Но не успява с параметър въведен varchar , защото няма регистриран имплицитен прехвърляне от varchar към regconfig . Ръководството:

Отхвърлете кандидат-функции, за които входните типове не съвпадат и не могат да бъдат преобразувани (с помощта на неявно преобразуване), за да съвпадне. неизвестни литерали се приема, че могат да бъдат конвертирани във всичко за тази цел.

Удебелен акцент мой.
Регистрираните предавания за 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

Обяснение за castcontext :

castcontext char
Показва в какви контексти може да бъде извикано предаването. e означава само като изрично предаване (използвайки CAST или :: синтаксис). a означава имплицитно при присвояване на целева колона, както и изрично. i означава имплицитно в изразите, както и в останалите случаи.

Прочетете повече за трите различни типа задания в главата СЪЗДАВАНЕ НА CAST.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво означава, когато процес на PostgreSQL е неактивен в транзакцията?

  2. Как да създадете просто размито търсене само с PostgreSQL?

  3. PostgreSQL:Уникално нарушение:7 ГРЕШКА:дублиращата се стойност на ключа нарушава уникалното ограничение users_pkey

  4. Разработване на PostgreSQL за Windows, част 1

  5. Как да предотвратим изтриването на първия ред в таблицата (PostgreSQL)?