sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-functieaanroep

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;



  1. Gebruik Create Statement om een ​​tabel te maken in SQL Server - SQL Server / T-SQL Tutorial Part 34

  2. Hoe kan ik regelterugloop en nieuwe regels in Postgresql verwijderen?

  3. Laad CSV-gegevens in MySQL in Python

  4. Hoe CRC32 werkt in MariaDB