sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL funktionskald

Det bestemmes af reglerne for Opløsning af funktionstype . Detaljeret forklaring i manualen. Relateret:

  • Er der en måde at deaktivere funktionsoverbelastning i Postgres

NULL uden eksplicit type cast starter som typen "ukendt":

SELECT pg_typeof(NULL)

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

Faktisk Jeg blev mistænksom og kørte en hurtig test, bare for at finde forskellige resultater i Postgres 9.3 og 9.4. varchar er valgt over integer (hvilket mærkeligt nok modsiger dine resultater):

SQL Fiddle.

Jeg vil tro, at reglen er punkt 4e på listen (ingen af ​​de tidligere punkter afgør kampen):

Ved hver stilling skal du vælge strengkategorien, hvis en kandidat accepterer den kategori. (Denne skævhed mod streng er passende, da en bogstavlig af ukendt type ligner en streng.)

Hvis du tilføjede en anden funktion med input, skriv text til den overbelastede blanding, text ville blive valgt over varchar .

Personligt er jeg næsten altid brug text i stedet for varchar . Selvom det er binært kompatibelt (så næsten, men ikke helt det samme), text ligger tættere på Postgres' hjerte i enhver henseende.

Det tilføjede jeg til violinen, samt et andet eksempel, hvor Postgres ikke kan bestemme sig og kaster raserianfald.

Hvis du vil vælge en bestemt funktion, skal du tilføje en eksplicit type cast (det er vejen at gå her!):

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



  1. MySQL Tutorial - En begyndervejledning til at lære MySQL

  2. Sådan viser du samlingen af ​​din forbindelse i MySQL

  3. SQL-fejl med Bestil efter i underforespørgsel

  4. Advarsel:mysql_fetch_array():det angivne argument er ikke et gyldigt MySQL-resultat