sql >> Base de Datos >  >> RDS >> PostgreSQL

Llamada a la función de PostgreSQL

Eso lo deciden las reglas de Resolución de tipo de función . Explicación detallada en el manual. Relacionado:

  • ¿Hay alguna forma de deshabilitar la sobrecarga de funciones en Postgres?

NULL sin conversión de tipo explícita comienza como tipo "desconocido":

SELECT pg_typeof(NULL)

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

En realidad, Sospeché y realicé una prueba rápida, solo para encontrar resultados diferentes en Postgres 9.3 y 9.4. varchar se elige sobre integer (que extrañamente contradice sus hallazgos):

Violín SQL.

Creo que la regla correspondiente es el punto 4e de la lista (ninguno de los puntos anteriores decide el partido):

En cada posición, seleccione la categoría de cadena si algún candidato acepta esa categoría. (Este sesgo hacia la cadena es apropiado ya que un literal de tipo desconocido parece una cadena).

Si agregó otra función con tipo de entrada text a la mezcla sobrecargada, text sería elegido sobre varchar .

Personalmente yo casi siempre usa text en lugar de varchar . Si bien es compatible con binarios (casi pero no exactamente lo mismo), text está más cerca del corazón de Postgres en todos los aspectos.

Agregué eso al violín, así como otro ejemplo en el que Postgres no puede decidir y hace una rabieta.

Si desea elegir una función en particular, agregue una conversión de tipos explícita (¡así es como se hace aquí!):

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