0

存在doesntの場合:私たちは、JSON形式で保存する製品のダンプを取得INSERT、それは私たちは、別の店舗名、商品詳細に何か私たちのかなり大きなテーブルを正規化してきた

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) 
); 

をし、我々各項目を繰り返し処理し、Delphiコンソールアプリケーションを介してPostgresに挿入します。これは同時に実行されます(したがって、4つのスレッドが製品のJSON配列を挿入して取得します)。

これは、最初に確認する、それを挿入し戻すIDをキャッシュしない場合は店舗名は、storeテーブルに存在する場合は、URLによって名前でproductproduct_urlための同じこと。

これらのチェックを1つずつ実行することなく、このテーブル(および外部テーブル)にデータを挿入する方法はありますか?私はCTE(WITH)を見てきましたが、私はこの問題の解決策であることは確信しています。

コードの前後の性質はトランザクション内で重いものになります。

older SO postsは類似していますが、解決策は実行可能ではないようです。私が見ているものはUSPERTとCTEを使って​​と思われる。

答えて

0

かなり遊んだ後、私はこの回答をstackoverflow postから解決しました。

答えは@Erwin BrandstetterのFunction with UPSERT in Postgres 9.5ですとても印象的です。

関連する問題