如果外部表不存在则插入到外部表

问题描述 投票:0回答:1

我们已经标准化了相当大的表格来分隔商店名称和产品详细信息,例如:

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
和按 url 的
product_url
执行相同的操作。

是否有一种 Postgres 方法可以一次性将数据插入到该表(和外部表)中,而无需逐一进行所有这些检查?我查看了 CTE(WITH),但我不确定这是否是这个问题的解决方案。

代码的来回性质以及它在事务中的性质变得很重。

有一些类似的较旧的 SO 帖子,但解决方案似乎并不可行。我正在查看的似乎是 this 使用 USPERT 和 CTE。

database postgresql insert foreign-key-relationship common-table-expression
1个回答
0
投票

经过相当多的尝试后,我从这篇stackoverflow帖子中找到了答案。

答案是@Erwin Brandstetter 的

Function with UPSERT in Postgres 9.5
,这是一个多么好的方法啊!太令人印象深刻了。

© www.soinside.com 2019 - 2024. All rights reserved.