带数组变量的Postgresql多重插入

带数组变量的Postgresql多重插入,postgresql,psql,Postgresql,Psql,我希望使用变量数组/列表进行多重动态插入。插入的数量将始终不同 我想换一个 insert into my table (col 1, col 2) select * from unnest(array[1, 2], array[3, 4]); 与 取决于是否要使用数据创建新表 这可以是一个简单的方法: SELECT * INTO table FROM unnest(array[1, 2], array[3, 4]); 或 在临时表中执行相同操作: SELECT * INTO temp myt

我希望使用变量数组/列表进行多重动态插入。插入的数量将始终不同

我想换一个

insert into my table (col 1, col 2)
select *
from unnest(array[1, 2], array[3, 4]);


取决于是否要使用数据创建新表

这可以是一个简单的方法:

SELECT * INTO table FROM unnest(array[1, 2], array[3, 4]);

在临时表中执行相同操作:

SELECT * INTO temp mytable FROM unnest(array[1, 2], array[3, 4]);
然后


希望这能回答您的问题。

我将它包装在函数中。。。然后,这将很好地转换为任何具有PostgreSQL数据适配器的编程语言,这几乎就是所有这些语言。作为一个额外的好处,它在psql中也将非常有效

CREATE OR REPLACE FUNCTION ez_insert(list1 integer[], list2 integer[])
  RETURNS integer AS
$BODY$
DECLARE
  rowcount integer;
BEGIN

  insert into my_table (col_1, col_2)
  values
  (unnest (list1), unnest (list2));

  GET DIAGNOSTICS rowcount = ROW_COUNT;
  return rowcount;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
援引:

select ez_insert (array[1, 2, 3], array[7, 8, 9])
警告-如果您的阵列大小不同,请期待奇怪

下面是一个C语言实现的快速示例:

NpgsqlCommand cmd = new NpgsqlCommand("select ez_insert(:ARRAY1, :ARRAY2)", conn);
cmd.Parameters.Add(new NpgsqlParameter("ARRAY1",
    NpgsqlDbType.Array | NpgsqlDbType.Integer));
cmd.Parameters.Add(new NpgsqlParameter("ARRAY2",
    NpgsqlDbType.Array | NpgsqlDbType.Integer));
cmd.Parameters[0].Value = ar1;
cmd.Parameters[1].Value = ar2;

int inserts = (int)cmd.ExecuteScalar();

我喜欢将SELECT*从unnestarray[1,2],数组[3,4]替换到表中;使用SELECT*从unnest进入表格:一些变量;因此,我可以用编程语言从函数中传入变量在本例中,您只需要创建一个函数来回答数组列表,并在unnestgetMyArrays中调用它。。。不知道如何从函数中获取此列表以帮助。。。
select ez_insert (array[1, 2, 3], array[7, 8, 9])
NpgsqlCommand cmd = new NpgsqlCommand("select ez_insert(:ARRAY1, :ARRAY2)", conn);
cmd.Parameters.Add(new NpgsqlParameter("ARRAY1",
    NpgsqlDbType.Array | NpgsqlDbType.Integer));
cmd.Parameters.Add(new NpgsqlParameter("ARRAY2",
    NpgsqlDbType.Array | NpgsqlDbType.Integer));
cmd.Parameters[0].Value = ar1;
cmd.Parameters[1].Value = ar2;

int inserts = (int)cmd.ExecuteScalar();