четверг, 14 июля 2011 г.

array function array_unique in postgresql

CREATE FUNCTION array_unique(anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
SELECT id FROM (
SELECT UNNEST($1) as id
) t
GROUP BY id
ORDER BY count(*) desc
    );
$FUNCTION$;

array function array_size in postgresql

CREATE OR REPLACE FUNCTION array_size(anyarray)
  RETURNS bigint
  language sql
as $FUNCTION$
    SELECT count(*) FROM (
        SELECT UNNEST($1)
    ) t;
$FUNCTION$;

среда, 13 июля 2011 г.

array function array_diff in postgresql

CREATE OR REPLACE FUNCTION array_diff(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT * FROM (SELECT UNNEST($1) as element) t WHERE element not in (SELECT UNNEST($2))
    );
$FUNCTION$;

array aggregate and function array_union like union all in postgresql

CREATE FUNCTION array_union(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT UNNEST($1)
        UNION ALL
        SELECT UNNEST($2)
    );
$FUNCTION$;


CREATE AGGREGATE array_union (anyarray)
(
sfunc = array_union,
stype = anyarray,
initcond = '{}'
);

array function array_intersect in postgresql

CREATE FUNCTION array_intersect(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT UNNEST($1)
        INTERSECT
        SELECT UNNEST($2)
    );
$FUNCTION$;