... wo die statandard Bibliotheken (?) Für diese Art von array_X Dienstprogramm ?
Versuchen Sie zu suchen ... Sehen Sie einige, aber keinen Standard:
Einfachste und schnellere array_distinct()Snippet-Lib-Funktion
Hier die einfachste und vielleicht schnellere Implementierung für array_unique()oder array_distinct():
CREATE FUNCTION array_distinct(anyarray) RETURNS anyarray AS $f$
SELECT array_agg(DISTINCT x) FROM unnest($1) t(x);
$f$ LANGUAGE SQL IMMUTABLE;
HINWEIS: Es funktioniert wie erwartet mit jedem Datentyp, außer mit Arrays von Arrays.
SELECT array_distinct( array[3,3,8,2,6,6,2,3,4,1,1,6,2,2,3,99] ),
array_distinct( array['3','3','hello','hello','bye'] ),
array_distinct( array[array[3,3],array[3,3],array[3,3],array[5,6]] );
Der "Nebeneffekt" besteht darin, alle Arrays in einer Reihe von Elementen zu explodieren.
PS: mit JSONB-Arrays funktioniert gut,
SELECT array_distinct( array['[3,3]'::JSONB, '[3,3]'::JSONB, '[5,6]'::JSONB] );
Bearbeiten: komplexer, aber nützlich, ein "drop nulls" -Parameter
CREATE FUNCTION array_distinct(
anyarray,
boolean DEFAULT false
) RETURNS anyarray AS $f$
SELECT array_agg(DISTINCT x)
FROM unnest($1) t(x)
WHERE CASE WHEN $2 THEN x IS NOT NULL ELSE true END;
$f$ LANGUAGE SQL IMMUTABLE;