Wpis z mikrobloga

Może ktoś pomoże, tylu tutaj programistów 15k to i może ktoś z PostgreSQL się znajdzie :)
Zapytanie:

CREATE VIEW vnodes AS SELECT n.*, m.mac FROM nodes n LEFT JOIN (SELECT nodeid, array_to_string(array_agg(mac), ',') AS mac FROM macs GROUP BY nodeid) m ON (n.id = m.nodeid);
krzyczy

BŁĄD: funkcja array_agg(character varying) nie jest unikalna
LINIA 1: ...nodes n LEFT JOIN (SELECT nodeid, array_to_string(array_agg(...
^
PODPOWIEDŹ: Nie można wybrać najlepiej pasującej funkcji. Być może należy dodać jawne rzutowanie typów.

Nie wiem jak mu to jawnie rzutować. Ma ktoś jakiś pomysł?
#sql #postgresql
  • 9
mac::character varying


@PrzChm: Tak, ale tutaj chodzi o funkcje (funkcja nie jest unikalna). Po wpisaniu:

CREATE VIEW vnodes AS SELECT n.*, m.mac FROM nodes n LEFT JOIN (SELECT nodeid, array_to_string(array_agg(mac::character varying), ',') AS mac FROM macs GROUP BY nodeid) m ON (n.id = m.nodeid);
Nadal krzyczy to samo.
@ciapekm: W dokumentacji postgresa widzę, że w 9.5 arrayagg ma dwie definicje:
array
agg(expression) any non-array type
arrayagg(expression) any array type

Gdzie w pg9.4 array
agg ma definicje any. Jedyne co mi przyszło do głowy to właśnie jawne rzutowanie żeby postgres mógł określić, które przeciążenie wybrać. Niestety musze odpuścić bo skończyły mi się pomysły
@PrzChm: Temat rozwiązany. Nie samodzielnie a z pomocą ludzi z IRC postgresa. Funkcja jakimś cudem znalazła się też w schemacie public, co pokazało polecenie \df arrayagg. Wystarczyło wykonać drop aggregate public.array_agg(anyelement);
Temat do zamknięcia :)