Tengo una consulta que usa array_agg con distinto como argumento y no se acepta en postgres 9.6.
Creé esta muestra para ilustrar el problema:
create table numbers (id integer primary key, name varchar(10)); insert into numbers values(1,'one'); insert into numbers values(2,'two');postgres 9.4
select array_agg(distinct(id)) from numbers; array_agg ----------- {1,2}postgres 9.6
ERROR: function array_agg(integer) is not unique LINE 1: select array_agg(distinct(id)) from numbers; ^ HINT: Could not choose a best candidate function. You might need to add explicit type casts.¿Qué debo cambiar para obtener este resultado en postgres 9.6?
Gracias.
Esto es lo que obtengo comprobando las funciones:
nspname | proname | proargtypes ------------+-----------+--------------------- pg_catalog | array_agg | [0:0]={anyarray} public | array_agg | [0:0]={anyelement} pg_catalog | array_agg | [0:0]={anynonarrayAhora, encontré el problema gracias al comentario de pozs . Eliminé la definición pública de la función agregada y funcionó.
El problema estaba solo en la base de datos en la que estaba trabajando, ya que encontré que algunas personas decían que la muestra les funcionaba. Creé una nueva base de datos y ejecuté el ejemplo. Y luego, el único cambio allí fueron las definiciones de funciones agregadas.
Ahora, encontré el problema gracias al comentario de pozs. Eliminé la definición pública de la función agregada y funcionó.
El problema estaba solo en la base de datos en la que estaba trabajando, ya que encontré que algunas personas decían que la muestra les funcionaba. Creé una nueva base de datos y ejecuté el ejemplo. Y luego, el único cambio allí fueron las definiciones de funciones agregadas.
Así que dejo la función pública | array_agg | [0:0]={anyelement} y funcionó.
Muchas gracias.
Funciona exactamente así, como lo demuestra este dbfiddle en PostgreSQL 9.6.2 en x86_64-pc-linux-gnu, compilado por gcc (Debian 4.9.2-10) 4.9.2, 64 bits .