2015-12-27 3 views
1

Я видел этот пример несколько раз, но только на одной колонкеPostgresql transfrom многомерный массив в реляционной модели

INSERT INTO user_subservices(user_id, subservice_id) 
SELECT 1 id, x 
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x 

мне нужно вставить несколько столбцов с многомерный массив, как:

INSERT INTO items(order_id,lot_serial,pallets,oum) VALUES from Array 

Пример массива :

[[3,'Fff767',89,'Boxes'],[3,'FDH6784',45,'Boxes'],[3,'FDH6788',97,'Boxes']...] 

Каким будет подход для этого с помощью Po stgresql 9.4.5

ответ

1

Вы можете создать функцию reduce_dim, чтобы отключить сверхмерный массив. См. https://wiki.postgresql.org/wiki/Unnest_multidimensional_array

CREATE OR REPLACE FUNCTION public.reduce_dim(anyarray) 
RETURNS SETOF anyarray AS 
$function$ 
DECLARE 
    s $1%TYPE; 
BEGIN 
    FOREACH s SLICE 1 IN ARRAY $1 LOOP 
     RETURN NEXT s; 
    END LOOP; 
    RETURN; 
END; 
$function$ 
LANGUAGE plpgsql IMMUTABLE; 

insert into items select t[1],t[2],t[3],t[4] from (select reduce_dim(reduce_dim(ARRAY[['3','Fff767','89','Boxes'],['3','FDH6784','45','Boxes'],['3','FDH6788','97','Boxes']])) t) as y; 
Смежные вопросы