目标是这样的:我有一组值来进入表A
,并将一组值写入表B
。进入B
的参考值的值为A
(通过外键),所以在插入A
值后,我需要知道在插入B
值时如何引用它们。我需要这个尽可能快。postgresql:如何获取用批量copy_from插入的行的主键?
我做了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
同伙与value
?
如果没有,最好的方法来完成我的目标是什么?
编辑:根据要求的样本数据:
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
,使用外键,而不是到列表对象的引用。
最后我做类似的措施。我有两个id字段:一个batch_id和一个within_batch_id。我用'nextval'获得了batch_id,我刚刚生成了自己的within_batch_id。然后我用batch_id做了一个选择以获得我刚插入的内容,并将它们与within_batch_id对齐。谢谢! – Claudiu