ホームページ > データベース > mysql チュートリアル > PostgreSQL の ON CONFLICT 句で複数の一意の列との競合を処理する方法

PostgreSQL の ON CONFLICT 句で複数の一意の列との競合を処理する方法

Susan Sarandon
リリース: 2025-01-12 17:48:48
オリジナル
997 人が閲覧しました

How to Handle Conflicts with Multiple Unique Columns in PostgreSQL's ON CONFLICT Clause?

PostgreSQL の ON CONFLICT 句での複数の競合ターゲットの指定

PostgreSQL テーブルには、一意として指定された複数の列が含まれることがよくあります。 ON CONFLICT 句を使用すると、単一の競合ターゲットに基づいて競合を検出できますが、複数の一意の列を持つテーブルを管理する場合は制限される可能性があります。

この制限を克服するために、PostgreSQL は複数の列にまたがる一意のインデックスを作成するという簡単な解決策を提供します。これを行うと、ON CONFLICT 句で複数の競合ターゲットを効果的に指定できます。

例:

2 つの一意の列col1 とcol2 を持つテーブルを考えてみましょう。次のコマンドを使用して、これら 2 つの列に一意のインデックスを作成できます:

<code class="language-sql">CREATE UNIQUE INDEX idx_table_col1_col2 ON table(col1, col2);</code>
ログイン後にコピー

このインデックスを利用して、ON CONFLICT 句の次の 2 つの列に関係する競合を処理できるようになりました。

<code class="language-sql">INSERT INTO table ...
ON CONFLICT (col1, col2)
DO UPDATE
SET ...</code>
ログイン後にコピー

競合が発生すると、PostgreSQL は新しい行のcol1 とcol2 の値を既存の行と比較して一意性を確認します。競合が検出された場合は、DO UPDATE 句が起動され、必要に応じて他の列を更新できるようになります。

注: 一意のインデックスに加えて、PostgreSQL は除外制約もサポートします。一意制約は、特定の列または列セットの重複値を防ぎますが、除外制約はさらに一歩進んで、特定の条件を満たす行を除外します。これは、より複雑なデータ整合性ルールを適用したい場合に役立ちます。

以上がPostgreSQL の ON CONFLICT 句で複数の一意の列との競合を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート