O tom rozhodují pravidla Rozlišení typu funkce . Podrobné vysvětlení v návodu. Související:
- Existuje způsob, jak zakázat přetěžování funkcí v Postgresu
NULL bez explicitního přetypování začíná jako typ "unknown":
SELECT pg_typeof(NULL)
pg_typeof
-----------
unknown
Ve skutečnosti Dostal jsem podezření a provedl jsem rychlý test, abych našel různé výsledky v Postgres 9.3 a 9.4. varchar
je vybráno přes integer
(což kupodivu odporuje vašim zjištěním):
SQL Fiddle.
Domnívám se, že odpovídající pravidlo je bod 4e v seznamu (žádný z dřívějších bodů nerozhoduje zápas):
Na každé pozici vyberte kategorii řetězce, pokud některý kandidát tuto kategorii akceptuje. (Toto zkreslení vůči řetězci je vhodné, protože literál neznámého typu vypadá jako řetězec.)
Pokud jste přidali další funkci s typem vstupu text
do přetíženého mixu, text
bude vybrán přes varchar
.
Osobně téměř vždy použijte text
místo varchar
. I když je binárně kompatibilní (takže téměř, ale ne úplně stejné), text
je v každém ohledu blíže srdci Postgresu.
Přidal jsem to k houslím a také další příklad, kdy se Postgres nemůže rozhodnout a vzteká se.
Pokud chcete vybrat konkrétní funkci, přidejte explicitní typ přetypování (tady je způsob!):
select test(null::int) AS func_int
, test(null::varchar) AS func_vc;