假设,我有一张桌子:
create table mytable (
"x" text,
"y" text
);
我的数组的值为x
,而y
的值为arr_x
和arr_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的新人。
答案 0 :(得分:3)
您可以尝试这个。您可以使用UNNEST和SELECT插入多行。请参阅此链接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)
希望这会有所帮助!!
答案 1 :(得分:1)
你的演员是错的,你不能text
。
尝试
INSERT INTO mytable (x, y)
SELECT
unnest('{x1, x2, x3}' :: TEXT []),
unnest('{y1, y2, y3}' :: TEXT []);
请注意,如果两个数组的长度不同,则这种形式的选择会表现得很奇怪。
postgres 9.4+中的不需要的函数允许您扩展多个数组,每个输出列使用一个数组:
INSERT INTO mytable
SELECT *
FROM unnest('{x1, x2, x3}' :: TEXT [], '{y1, y2, y3, y4}' :: TEXT [])