PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

BŁĄD PostgreSQL:funkcja to_tsvector (znak zmienny, nieznany) nie istnieje

Użyj wyraźnego rzutowania typu:

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

Lub zmień kolumnę languages.language aby wpisać regconfig . Zobacz odpowiedź @Swav.

Dlaczego?

Postgres umożliwia przeciążanie funkcji. Sygnatury funkcji są definiowane przez ich (opcjonalnie schemat -kwalifikowany) nazwisko plus (lista) typ parametru wejściowego (s). Dwuparametrowa forma to_tsvector() oczekuje typu regconfig jako pierwszy 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

Jeśli żadna istniejąca funkcja nie pasuje dokładnie , zasady rozpoznawania typów funkcji decydują o najlepszym dopasowaniu — jeśli takie istnieje. To się powiodło dla to_tsvector('english', 'hello world') , z 'english' będąc nieopisanym literałem ciągu . Ale kończy się niepowodzeniem z parametrem wpisanym varchar , ponieważ nie ma zarejestrowanego niejawnego rzutuj z varchar do regconfig . Instrukcja:

Odrzuć funkcje kandydujące, dla których typy danych wejściowych nie pasują i nie mogą zostać przekonwertowane (za pomocą niejawnego konwersji), aby dopasować. nieznane literały zakłada się, że w tym celu można je zamienić na cokolwiek.

Pogrubiony nacisk na kopalnię.
Zarejestrowane rzutowania dla 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

Wyjaśnienie dla castcontext :

castcontext char
Wskazuje, w jakich kontekstach można wywoływać obsadę. e oznacza tylko jako jawne rzutowanie (za pomocą CAST lub :: składnia). a oznacza niejawnie w przypisaniu do kolumny docelowej, jak również jawnie. i oznacza niejawnie w wyrażeniach, jak również w innych przypadkach.

Przeczytaj więcej o trzech różnych typach zadań w rozdziale TWORZENIE ODS.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwencje nazewnictwa PostgreSQL

  2. Jak zainstalować tylko narzędzia klienckie dla PostgreSQL w systemie Windows?

  3. Jak wylistować rekordy z datą z ostatnich 10 dni?

  4. Znajdź nazwę hosta i port za pomocą poleceń PSQL

  5. postgresql zwraca 0, jeśli zwracana wartość ma wartość null