PostgreSQL是否具有Oracle ArrayBind的等价物?

时间:2017-09-02 03:59:14

标签: postgresql

Oracle可以通过将数组作为绑定变量传递来执行批量插入。然后,数据库为数组的每个成员执行单独的行插入:

http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html

因此,如果我有一个数组:

string [] arr = {1,2,3}

我将此作为绑定到我的SQL:

插入my_table(my_col)值(:arr)

我最终在表格中输了3行。

有没有办法在PostgreSQL中执行此操作而无需修改SQL? (即我不想使用复制命令,显式多行插入等)

4 个答案:

答案 0 :(得分:1)

您最近可以使用的是:

insert into my_table(my_col) SELECT unnest(:arr)

答案 1 :(得分:1)

PgJDBC支持COPY,这是你最好的选择。我知道这不是你想要的,而且你必须使用不同的行表示令人沮丧,但这是你能得到的最好的。

那就是说,你会发现如果你准备一个语句然后是addBatch和executeBatch,你将获得非常可靠的性能。足够的,因此通常不值得关心使用COPY。见Statement.executeBatch。您可以使用几行长的简单函数在其上创建“数组绑定”。它不如服务器端数组绑定好,但它会做得很好。

答案 2 :(得分:0)

我不确定您要使用哪种语言,但在Java中,例如,可以使用Connection.createArrayOf()

相关问题/答案: error setting java String[] to postgres prepared statement

答案 3 :(得分:0)

不,你不能在PostgreSQL中做到这一点。

您必须使用多行INSERTCOPY语句。