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

Извикване на функция на PostgreSQL

Това се решава от правилата на Разделителна способност на типа функция . Подробно обяснение в ръководството. Свързано:

  • Има ли начин да деактивирате претоварването на функциите в Postgres

NULL без изрично привеждане на тип започва като тип "неизвестен":

SELECT pg_typeof(NULL)

 pg_typeof
-----------
 unknown

Всъщност, Подозрях се и направих бърз тест, само за да намеря различни резултати в Postgres 9.3 и 9.4. varchar се избира над integer (което странно противоречи на вашите констатации):

SQL Fiddle.

Мисля, че съответното правило е точка 4д в списъка (никоя от по-ранните точки не решава мача):

На всяка позиция изберете низовата категория, ако някой кандидат приема тази категория. (Това пристрастие към низ е подходящо, тъй като литералът от неизвестен тип изглежда като низ.)

Ако сте добавили друга функция с тип на въвеждане text към претоварения микс, text ще бъде избран през varchar .

Лично аз почти винаги използвайте text вместо varchar . Макар че е двоично съвместим (така че почти, но не съвсем същият), text е по-близо до сърцето на Postgres във всяко отношение.

Добавих това към цигулката, както и друг пример, когато Postgres не може да вземе решение и изпада в гняв.

Ако искате да изберете конкретна функция, добавете изрично привеждане на типа (това е начинът да отидете тук!):

select test(null::int)     AS func_int
     , test(null::varchar) AS func_vc;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORDER BY псевдоним не работи

  2. Цената на безплатната реклама на PostgreSQL

  3. Как да пишем с главни букви първата буква на всяка дума в PostgreSQL

  4. какво е @JoinColumn и как се използва в Hibernate

  5. Как да закръглим до най-близките X минути с PL/pgSQL?