※ この記事にはアフィリエイトリンクが含まれます

PostgreSQLを使ってデータを登録していると、「すでに存在している行を重複してINSERTしてしまった」という経験はありませんか?
特に、IDやメールアドレスなど、一意であるべき情報が重複すると、システムの不具合やデータの不整合につながる恐れがあります。
そこで本記事では、「すでに存在する行がある場合にはINSERTをスキップする」方法について、実践的なSQLの書き方を交えてわかりやすく解説します。
PostgreSQLには、NOT EXISTS
やON CONFLICT
といった便利な構文が用意されており、シンプルかつ安全に重複を防止する方法を実現できます。
SQL初心者の方や、データベースを扱うエンジニアの方にとって、すぐに業務に役立つ内容となっていますので、ぜひ参考にしてください。
これから本格的にプログラミングを学びたい方へ
もしあなたがSQLのスキルだけでなく、「正規表現だけじゃなく、もっと本格的にプログラミングを学びたい」と思っているなら、実務レベルでのスキルが身につく「RareTECH」という学習サービスがおすすめです。

本気でやってみたい。でも何から始めたらいいか分からない。そんなときこそ、信頼できる学習環境に頼っていいんです。一人で悩む時間を、実務レベルの力に変えられます!
少しでも気になった方は、まずは無料カウンセリングで話を聞いてみるのがおすすめです。
方法1:INSERT … SELECT + NOT EXISTS
まずご紹介するのは、PostgreSQLに限らず多くのRDBMSで利用できる基本的な方法、INSERT ... SELECT
文と NOT EXISTS
を組み合わせる手法です。
この方法では、指定した条件に一致する行がすでに存在しない場合のみINSERTすることができます。
INSERT INTO users (id, name)
SELECT 1, 'Alice'
WHERE NOT EXISTS (
SELECT 1 FROM users WHERE id = 1
);
ポイント
ON CONFLICT DO NOTHING(PostgreSQL特有)
PostgreSQLに限定されますが、よりシンプルに重複INSERTを防ぐことができる構文があります。
それが、ON CONFLICT DO NOTHING
です。
この構文は、INSERT時に一意制約(UNIQUEやPRIMARY KEY)に違反するデータがあった場合、何もせずにスキップするという動作をしてくれます。
INSERT INTO users (id, name)
VALUES (1, 'Alice')
ON CONFLICT (id) DO NOTHING;
前提条件:一意制約が必要
この構文を利用するには、対象列に対して一意制約(UNIQUE)またはPRIMARY KEYが設定されている必要があります。
ポイント
複数行のINSERT文も書ける
INSERT INTO users (id, name)
VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Carol')
ON CONFLICT (id) DO NOTHING;
一意制約が必要となりますが、一括INSERTと重複回避を同時に実現できるのが大きな利点です。
まとめ
今回は、PostgreSQLで「存在しない行のみINSERTする方法」について、代表的な2つの手法をご紹介しました。
方法 | 特徴 | 向いているケース |
---|---|---|
INSERT ... SELECT ... WHERE NOT EXISTS | 柔軟な条件判定が可能。構文は少し冗長。 | 一意制約がない場合や、複雑な存在判定をしたいとき |
INSERT ... ON CONFLICT DO NOTHING | 非常に簡潔でスマート。PostgreSQL専用の構文。 | 一意制約があるシンプルなINSERT処理 |
どちらの方法も、重複によるエラーやデータ不整合を防ぐために非常に重要なテクニックです。
実際の開発や運用の現場では、「一意制約の有無」「登録条件の複雑さ」「処理件数」などに応じて、最適な方法を選び使い分けることがポイントとなります。
データベースは、正確で信頼性の高い情報を蓄積・活用するための基盤です。
そのためにも、「重複を防ぐINSERT処理」はぜひマスターしておきましょう。
PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。

「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。
実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECHの無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。

もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。
コメント