gpt4 book ai didi

postgresql - 帮助 CSV 导入的 Postgres 规则

转载 作者:行者123 更新时间:2023-11-29 12:39:11 28 4
gpt4 key购买 nike

我需要每天将一个包含数千行的 10 行的 csv 文件导入 Postgres 数据库。我正在寻找最有效的方法来做到这一点,因为 csv 文件中的每一行都可以是新记录或现有记录,如果它存在则应该更新。经过多次搜索,我偶然发现了一个解决方案,我使用了这个解决方案:

CREATE OR REPLACE RULE insert_on_duplicate_update_advertiser_campaign_keywords_table AS
ON INSERT TO advertiser_campaign_keywords
WHERE (new.phrase, new.match_type, new.advertiser_campaign_id) IN (
SELECT phrase, match_type, advertiser_campaign_id
FROM advertiser_campaign_keywords
WHERE phrase = new.phrase AND match_type = new.match_type AND advertiser_campaign_id = new.advertiser_campaign_id AND state != 'deleted')
DO INSTEAD
UPDATE advertiser_campaign_keywords
SET bid_price_cpc = new.bid_price_cpc
WHERE phrase = new.phrase AND match_type = new.match_type AND advertiser_campaign_id = new.advertiser_campaign_id;

这是我最接近可行的解决方案,但还不完整。它在看起来像这样的插入上失败:

INSERT INTO advertiser_campaign_keywords (phrase, bid_price_cpc, match_type, advertiser_campaign_id) VALUES 
('dollar', 1::text::money, 'Broad', 1450),
('two words', 1.2::text::money, 'Broad', 1450),
('two words', 1.0::text::money, 'Broad', 1450),
('three words exact', 2.5::text::money, 'Exact', 1450),
('four words broad match', 1.1::text::money, 'Exclusive', 1450),
('three words exact', 2.1::text::money, 'Exact', 1450);

错误信息是:

duplicate key value violates unique constraint "unique_phrase_campaign_combo"

unique_phrase_campaign_combo 看起来像:

CONSTRAINT "unique_phrase_campaign_combo" UNIQUE ("phrase", "advertiser_campaign_id", "match_type", "deleted_at")

除非记录被标记为已删除,否则 deleted_at 为空。

有人知道如何解决这个问题吗?

谢谢

最佳答案

最好的方法是添加一个暂存表。使用复制来填充暂存表。然后使用它来进行插入和更新。

UPDATE target_table t
SET ...
FROM staging_table s
WHERE t.id = s.id

INSERT INTO target_table
SELECT * FROM staging_table s
WHERE s.id NOT EXISTS (
SELECT id FROM target_table
)

关于postgresql - 帮助 CSV 导入的 Postgres 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com