目標是這樣的:我有一組值來進入表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