From: | Bartosz Dmytrak <bdmytrak(at)eranet(dot)pl> |
---|---|
To: | ChoonSoo Park <luispark(at)gmail(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: How to dereference 2 dimensional array? |
Date: | 2012-02-16 22:47:14 |
Message-ID: | CAD8_UcbidqGWe=1nNT5vawHktVWV8Xd+6JM7tHBkCUkBN=p3=A@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi,
this could be start point for discussion:
CREATE OR REPLACE FUNCTION public."arraysToHstore" (IN a TEXT[], OUT c
hstore[])
RETURNS hstore[]
AS
$BODY$
DECLARE
i INT;
elements INT;
dim INT;
BEGIN
elements := array_length(a,2); -- # of elements in each dimension
dim := array_length(a,1); -- # of dimensions
a := string_to_array(array_to_string(a, '|', 'NULL'), '|', 'NULL');
--rewrite multidimensional array into single dimensional
FOR i IN 0..(dim -1) LOOP --loop throug all dimensions to create hsore
array (0 is for first elment in rewrited array)
c[i+1] = hstore (a[(i*elements)+1: (i+1)*elements]); --create hstore array
element using part of array "a", this part (window) is moving while loop is
evaluated)
END LOOP;
END
$BODY$
LANGUAGE plpgsql SECURITY DEFINER IMMUTABLE STRICT;
--usage example
SELECT (public."arraysToHstore"('{{"f1", "1", "f3", "123", "f4", "ABC"},
{"f5", "2", "f6", "345", "f7", "DEF"}}')::hstore[])[2]
This works for me (PostgreSQL 9.1.2).
You can pass whatever text array You want (any size, but 2 dimensions only)
and You will receive 1 dimentional hstore array with number of elements
corresponding to input array's dimensions)
Regards,
Bartek
2012/2/16 ChoonSoo Park <luispark(at)gmail(dot)com>
> I would like to construct hstore array from 2 dimensional array.
>
>
> For example,
>
>
> '{{f1, 1, f2, 123, f3, ABC, ...}, {f1, 2, f2, 345, f3, DEF, ...}}'
>
>
> Should be converted to
>
>
> 2 hstore values
>
> "f1"=>"1", "f2"=>"123", "f3"=>"ABC", ...
>
> "f2"=>"2", "f2"=>"345", "f3"=>"DEF", ...
>
>
> create or replace function convertHStore(p1 text[][]) RETURNS hstore[]
>
>
> hstore function requires text[] to convert array to hstore. Therefore I
> should be able to dereference 2 dimensional array element.
>
> Inside this custom plpgsql function, p1[1] is not valid syntax to
> dereference the 1st element in p1.
>
>
> Anyone knows how to solve this problem?
>
>
> Thank you,
>
> Choon Park
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2012-02-16 23:00:56 | Re: running multiple versions |
Previous Message | John R Pierce | 2012-02-16 22:45:18 | Re: Fwd: Re: Dynamic update of a date field |