2016-12-23 1 views
1

가정하면, 나는 테이블이 있습니다어떻게 Postgres의 두 배열에서 테이블 값을 삽입합니까?

create table mytable (
    "x" text, 
    "y" text 
); 

을 그리고 x에 대한 값으로 배열을 가지고 y에 대한 arr_xarr_y라고 :

["x1", "x2", "x3"] 
["y1", "y2", "y3"] 

내가 하나 개의 쿼리로이 값을 삽입 할. 원하는 결과는 다음과 같습니다

x | y 
------- 
x1 | y1 
x2 | y2 
x3 | y3 

내가 그런 식으로 뭔가를 시도했지만 실패 :

insert into mytable ("x", "y") 
    select unnest(arr_x::text), unnest(arr_y::text); 

어떤 생각이 어떻게 값을 삽입 할 수 있습니다? 나는 Postgres에서 새롭다.

+1

':: text [] '로 변환하려고 했습니까? – teppic

답변

1

캐스트가 잘못되었으므로 text을 (를) 다시 신고 할 수 없습니다. 두 배열의 길이가 같지 않은 경우 선택의이 모양이 이상한 동작하는지

INSERT INTO mytable (x, y) 
    SELECT 
    unnest('{x1, x2, x3}' :: TEXT []), 
    unnest('{y1, y2, y3}' :: TEXT []); 

참고하십시오.

출력 열 당 하나 개의 배열을 사용하여 여러 배열을 확장 할 수 있습니다 9.4+ 포스트 그레스의 unnest 기능 :

INSERT INTO mytable 
    SELECT * 
    FROM unnest('{x1, x2, x3}' :: TEXT [], '{y1, y2, y3, y4}' :: TEXT []) 
+0

감사합니다. – Fomalhaut

2

당신은 this.You은 SELECT와 함께 UNNEST를 사용하여 여러 행에 삽입 할 수있는 시도 할 수 있습니다. 이 링크 참조 insert with unnest function - skips a number in serial column

postgres=# CREATE TABLE mytable (
postgres(# ID SERIAL PRIMARY KEY, 
postgres(# column1 VARCHAR(50), 
postgres(# column2 VARCHAR(50)); 
CREATE TABLE 
postgres=# INSERT into mytable(column1,column2) 
postgres-# SELECT UNNEST(ARRAY['x1','x2','x3']), UNNEST(ARRAY['Y1','Y2','Y3']); 
INSERT 0 3 
postgres=# TABLE mytable; 
id | column1 | column2 
----+---------+--------- 
    1 | x1  | Y1 
    2 | x2  | Y2 
    3 | x3  | Y3 
(3 rows) 

postgres=# INSERT into mytable(column1,column2) 
SELECT UNNEST(ARRAY['x4','x5']), UNNEST(ARRAY['Y4','Y5']); 
INSERT 0 2 
postgres=# TABLE mytable; 
id | column1 | column2 
----+---------+--------- 
    1 | x1  | Y1 
    2 | x2  | Y2 
    3 | x3  | Y3 
    4 | x4  | Y4 
    5 | x5  | Y5 
(5 rows) 

희망이 있습니다!

관련 문제