【postgres】insertで主キーが重複しててもエラーなく処理を終了する方法

insertで主キー被ってたら無視して欲しいときあるよねー

あるあるー

書きます

そもそもPostgreSQLって何?

PostgreSQLは、世界で最も進んだオープンソースのリレーショナルデータベースシステムの一つです。信頼性、データの整合性、そして豊富な機能性を兼ね備えており、小規模なプロジェクトから大規模なエンタープライズアプリケーションまで、幅広い用途で利用されています。オープンソースであるため、誰でも自由に使用、変更、配布することができます。SQL言語の多くの標準をサポートしているだけでなく、複雑なクエリ、外部キー、トリガー、ビュー、トランザクションの整合性など、企業が必要とする高度な機能を数多く提供しています。

PostgreSQLの魅力はどこにある?

  • 高度な信頼性とデータの整合性: PostgreSQLはトランザクションのACID(原子性、一貫性、隔離性、持続性)特性を完全にサポートしており、データの整合性を保ちながら高い信頼性を提供します。
  • 拡張性: カスタムデータ型、関数、演算子を定義できるなど、ユーザーが必要に応じてシステムを拡張できる機能が豊富にあります。
  • オープンソース: コミュニティによって支えられており、商用データベースに負けないほどの強力な機能を無料で提供しています。
  • 多様なインデックスサポート: B-tree、ハッシュ、GiST、SP-GiST、GINといった多様なインデックスタイプをサポートしており、データ検索の効率化を図れます。
  • 拡張性の高いフルテキスト検索: PostgreSQLは高度なフルテキスト検索機能を備えており、大量のテキストデータの中から必要な情報を素早く見つけ出すことができます。

誰に向いているの?

PostgreSQLは、信頼性と高度な機能が必要なビジネスアプリケーション、大規模なデータウェアハウス、カスタムアプリケーションの開発など、幅広いシナリオで使用されています。スタートアップから大企業まで、さまざまな組織がPostgreSQLをデータ管理のために選んでいます。

PostgreSQLでできること

  • 複雑なデータベースソリューションの構築: 多様なデータタイプと高度なクエリ言語をサポートしているため、複雑なデータモデリングやビジネスロジックの実装が可能です。
  • 大量データの高速処理: 高度なインデックス機能と効率的なストレージエンジンにより、大量のデータを高速に処理できます。
  • 地理空間データの管理: PostGIS拡張機能を利用することで、地理空間データを扱うアプリケーションの開発が可能です。

PostgreSQLは、その堅牢性、拡張性、オープンソースという特性を生かして、データベース管理システムの中で独自の地位を築いています。これからも進化を続けるPostgreSQLは、あらゆるデータ管理ニーズに対応するための強力な選択肢となるでしょう。

では書いていきます。

コンフリクトしていたときエラー無く終了するInsert文

SQL
INSERT INTO table_name ("primary_key", "column") VALUES (%s, %s) ON CONFLICT ("primary_key") DO NOTHING;'

ON CONFLICT (<カラム名>) DO NOTHING:挿入しようとしているレコードの指定したカラムの値が、既存の行と重複している場合に行う動作を指定しています。DO NOTHINGは競合が発生した場合には、何もせずに終了することを指定しています。

コンフリクトしていたときに特定のカラムだけ更新するInsert文

競合が発生した場合に、特定のカラムだけ更新したい場合はDO UPDATEが使えます。

以下のように使います。

SQL
INSERT INTO table_name ("primary_key", "column") VALUES (%s, %s) ON CONFLICT ("primary_key") DO UPDATE SET <column1> = <value1>, <column2> = <value2>;'