姬長信(Redy)

postgresql:如何获取用批量copy_from插入的行…


目标是这样的:我有一组要放入表A的值,一组有要进入表B的值.要进入B的值引用A中的值(通过外键),因此在插入A值之后我需要知道在插入B值时如何引用它们.我需要尽快.

我用来自以下内容的批量副本进行了B值插入:

def bulk_insert_copyfrom(cursor, table_name, field_names, values):
    if not values: return

    print "bulk copy from prepare..."
    str_vals = "/n".join("/t".join(adapt(val).getquoted() for val in cur_vals) for cur_vals in values)
    strf = StringIO(str_vals)
    print "bulk copy from execute..."
    cursor.copy_from(strf, table_name, columns=tuple(field_names))

这比执行INSERT VALUES … RETURNING id查询要快得多.我想对A值执行相同的操作,但是我需要知道插入的行的ID.

有什么方法可以执行这种方式的批量复制,但是可以获取所插入行的id字段(主键),从而使我知道哪个id与哪个值相关联?

如果没有,实现我的目标的最佳方法是什么?

编辑:根据请求的示例数据:

a_val1 = [1, 2, 3]
a_val2 = [4, 5, 6]
a_vals = [a_val1, a_val2]

b_val1 = [a_val2, 5, 6, 7]
b_val2 = [a_val1, 100, 200, 300]
b_val3 = [a_val2, 9, 14, 6]
b_vals = [b_val1, b_val2, b_val3]

我想使用外键而不是对列表对象的引用来插入a_vals,然后插入b_vals.