Dat wordt bepaald door de regels van Functietyperesolutie . Uitgebreide uitleg in de handleiding. Gerelateerd:
- Is er een manier om overbelasting van functies in Postgres uit te schakelen
NULL zonder expliciete typecast begint als type "onbekend":
SELECT pg_typeof(NULL)
pg_typeof
-----------
unknown
Eigenlijk, Ik kreeg argwaan en voerde een snelle test uit om verschillende resultaten te vinden in Postgres 9.3 en 9.4. varchar
wordt gekozen over integer
(wat vreemd spreekt uw bevindingen tegen):
SQL Fiddle.
Ik zou denken dat de overeenkomstige regel punt 4e in de lijst is (geen van de eerdere punten bepaalt de wedstrijd):
Selecteer bij elke positie de tekenreekscategorie als een kandidaat die categorie accepteert. (Deze voorkeur voor string is passend omdat een letter van het onbekende type eruitziet als een string.)
Als je een andere functie hebt toegevoegd met invoertype text
naar de overbelaste mix, text
zou worden gekozen boven varchar
.
Persoonlijk bijna altijd gebruik text
in plaats van varchar
. Hoewel het binair compatibel is (dus bijna maar niet helemaal hetzelfde), text
ligt in elk opzicht dichter bij het hart van Postgres.
Ik heb dat toegevoegd aan de viool, evenals een ander voorbeeld waarin Postgres niet kan beslissen en een driftbui krijgt.
Als je een bepaalde functie wilt kiezen, voeg dan een expliciete typecast toe (dat is de manier om hier te gaan!):
select test(null::int) AS func_int
, test(null::varchar) AS func_vc;