sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL funktionsanrop

Det bestäms av reglerna för Funktionstypupplösning . Detaljerad förklaring i manualen. Relaterat:

  • Finns det något sätt att inaktivera funktionsöverbelastning i Postgres

NULL utan explicit typ cast börjar som typen "okänt":

SELECT pg_typeof(NULL)

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

Faktiskt Jag blev misstänksam och körde ett snabbtest, bara för att hitta olika resultat i Postgres 9.3 och 9.4. varchar väljs över integer (vilket märkligt nog motsäger dina upptäckter):

SQL-fiol.

Jag skulle tro att enligt regeln är punkt 4e i listan (ingen av de tidigare punkterna avgör matchen):

Vid varje position, välj strängkategori om någon kandidat accepterar den kategorin. (Denna förspänning mot sträng är lämplig eftersom en bokstavlig bokstav av okänd typ ser ut som en sträng.)

Om du har lagt till en annan funktion med inmatningstyp text till den överbelastade mixen, text skulle väljas över varchar .

Personligen har jag nästan alltid använd text istället för varchar . Samtidigt som den är binärkompatibel (så nästan men inte riktigt samma), text ligger närmare Postgres hjärta i alla avseenden.

Jag lade till det i fiolen, liksom ett annat exempel där Postgres inte kan bestämma sig och kastar ut raserianfall.

Om du vill välja en viss funktion, lägg till en explicit typ av rollbesättning (det är vägen att gå här!):

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



  1. Hur man beställer efter datum i T-SQL

  2. Hur ansluter jag till MySQL på Amazon EC2 från Linux / Mac?

  3. Oracle PL/SQL:Skapa DML-paket online

  4. Likheter och skillnader mellan funktionerna RANK, DENSE_RANK och ROW_NUMBER