我们将相当大的表格标准化为单独的商店名称和产品详细信息,例如:
CREATE TABLE store_products
(
id BIGINT DEFAULT PRIMARY KEY NOT NULL,
storeid INTEGER REFERENCES store(id),
productid BIGINT REFERENCES product_details(id)
producturlid BIGINT REFERENCES product_url(id)
);
我们以JSON格式转储商店产品,我们遍历每个项目并通过Delphi控制台应用程序将其插入Postgres。它同时执行此操作(因此插入4个线程并通过JSON产品数组)。
它首先检查store
表中是否存在商店名称,如果不存在,则缓存返回的ID,对product
的名称和product_url
按名称执行相同的操作
是否有Postgres方法一次性将数据插入此表(和外表),而无需逐个进行所有这些检查?我看过CTE(WITH),但我不确定这是解决这个问题的方法。
代码的来回性质以及它在交易中变得沉重。
有一些older SO posts相似,但解决方案似乎并不可行。我正在使用USPERT和CTE来查看this one。
答案 0 :(得分:0)
经过相当多的游戏后,我找到了stackoverflow post的答案。
@Erwin Brandstetter的答案是Function with UPSERT in Postgres 9.5
,这是一个很好的方式!如此令人印象深刻。