... Nơi các thư viện statandard (?) Cho loại tiện ích array_X ??
Cố gắng tìm kiếm ... Xem một số nhưng không có tiêu chuẩn:
array_distinct()
Hàm đoạn mã-lib đơn giản và nhanh hơn
Đây là cách triển khai đơn giản nhất và có lẽ nhanh hơn cho array_unique()
hoặc 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;
LƯU Ý: nó hoạt động như mong đợi với bất kỳ kiểu dữ liệu nào, ngoại trừ với mảng mảng,
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]] );
"hiệu ứng phụ" là làm nổ tất cả các mảng trong một tập hợp các phần tử.
PS: với mảng JSONB hoạt động tốt,
SELECT array_distinct( array['[3,3]'::JSONB, '[3,3]'::JSONB, '[5,6]'::JSONB] );
Chỉnh sửa: phức tạp hơn nhưng hữu ích, tham số "drop nulls"
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;