如何从Postgres中的两个数组插入表值?

时间:2016-12-23 05:18:22

标签: sql postgresql

假设,我有一张桌子:

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的新人。

2 个答案:

答案 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 [])