I am trying to select arrays in a set-returning function in postgres 8.4, but receiving the error:
"array value must start with "{" or dimension information".
This issue appears to relate to locationnodes.rs_people_c sometimes having an empty array. I've tried to get around that with a COALESCE statement. No luck.
function:
CREATE OR REPLACE FUNCTION fn_matview_location_slots (
week_start DATE
) RETURNS setof matview_location_slots_info AS
$$
DECLARE
resulter matview_location_slots_info%ROWTYPE;
BEGIN
FOR resulter IN
SELECT
rs_node AS node,
rs_date AS dater,
...
COALESCE(rs_people_c, '{}'::INTEGER[]) AS people,
rs_location AS location
FROM
locationnodes
WHERE
rs_date >= week_start
LOOP
RETURN NEXT resulter;
END LOOP;
END; $$ LANGUAGE plpgsql;
type:
CREATE TYPE matview_location_slots_info AS (
node VARCHAR,
dater DATE,
...
people INTEGER[],
location INTEGER[]
);
data
select rs_people_c from locationnodes;
rs_people_c
-------------------------------------
{}
{}
{731}
{32}
{31}
{}
{62}
{540,72,69,53,37,42,201,51,58}
{64}
COALESCE
too). Also you have typo in your PL/pgSQL functionweek_start DATE,
should be justweek_start DATE
. – Grzegorz Szpetkowski Aug 2 '11 at 21:21week_start
comma problem. Thanks for pointing that out. I've also added the postgres version (8.4). – rorycl Aug 2 '11 at 21:34