問題タブ [upsert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - Postgres SQLを使用して、単一行のUPSERTをエミュレートするための最速のトランザクションは何ですか?
この質問は、セットではなく、単一の行に関するものです。Pg(9.0)の最新かつ最高のバージョンを使用すると、何がより高速になるのか、そしてその理由がわかります。
PKEYのSELECTに基づく条件付きUPDATEまたはINSERT
INSERTを試み、失敗時に例外をキャッチし、UPDATEにフォールバックします
UPDATEの試行、失敗時に例外をキャッチし、INSERTにフォールバックする
これはデータセットに依存するため、次の3つのシナリオを想定します。
- 行の50%が存在し、50%が存在しません
- 行の100%が存在します
- 行の100%が存在しません
プレゼンスは、PKEYが満たされ、行を更新する必要があることを意味します。これに関する研究へのリンクは素晴らしいでしょう。
mongodb - mongoDB mongoimport アップサート
私は次の一括更新をしようとしています
インポートしようとしているcsvは次のようになります。
メール列をクエリ引数としてチェックし、それに応じてフル ネームを更新する必要があります。ただし、何もインポートされず、エラーが発生しました。
問題はどこだ?どうすればいいですか?
java - Hibernate で一意のキーに基づいて検索または挿入する
一意だが主キーではないキーに基づいて Hibernate オブジェクトを返すメソッドを作成しようとしています。エンティティがデータベースに既に存在する場合はそれを返したいのですが、そうでない場合は、新しいインスタンスを作成して保存してから返したいと思います。
更新:これを書いているアプリケーションは、基本的に入力ファイルのバッチプロセッサであることを明確にしましょう。システムは、ファイルを 1 行ずつ読み取り、データベースにレコードを挿入する必要があります。ファイル形式は基本的に、スキーマ内の複数のテーブルの非正規化ビューであるため、親レコードを解析してデータベースに挿入し、新しい合成キーを取得するか、既に存在する場合はそれを選択する必要があります。次に、そのレコードに戻る外部キーを持つ他のテーブルに関連するレコードを追加できます。
これが難しい理由は、各ファイルを完全にインポートするか、まったくインポートしない必要があるためです。つまり、特定のファイルに対して行われるすべての挿入と更新は、1 つのトランザクションの一部である必要があります。すべてのインポートを実行するプロセスが 1 つしかない場合、これは簡単ですが、可能であれば、これを複数のサーバーに分割したいと考えています。これらの制約のため、1 つのトランザクション内にとどまることができる必要がありますが、レコードが既に存在する例外を処理する必要があります。
親レコードのマップされたクラスは次のようになります。
このメソッドを書く最初の試みは次のとおりです。
問題は、探している名前が存在する場合、uniqueResult() の呼び出しによって org.hibernate.AssertionFailure 例外がスローされることです。完全なスタック トレースは以下のとおりです。
この例外がスローされる原因を知っている人はいますか? 休止状態はこれを達成するためのより良い方法をサポートしていますか?
また、最初に挿入してから、それが失敗したかどうか、いつ失敗したかを選択する理由を先制的に説明しましょう。これは分散環境で機能する必要があるため、チェック全体で同期して、レコードが既に存在するかどうかと挿入を確認できません。これを行う最も簡単な方法は、すべての挿入で制約違反をチェックして、データベースにこの同期を処理させることです。
ruby - MongoDb で複数のレコードをアップサートする
次のクエリで MongoDB に複数のレコードをアップサートさせようとしていますが、最終的には MongoMapper と Mongo ruby ドライバーを使用しています。
すべてのレコードが存在する場合、これは正常に機能しますが、存在しないレコードに対して新しいレコードは作成されません。次のコマンドは、シェルからの望ましい効果がありますが、おそらく Ruby ドライバーからは理想的ではありません。
ruby 内から挿入したい各 ID をループすることもできますが、それでは項目ごとにデータベースにアクセスする必要があります。データベースへの 1 回の旅行で ruby ドライバーから複数のアイテムをアップサートする方法はありますか? ここでのベストプラクティスは何ですか? mongomapper と ruby ドライバーを使用して、複数の更新を 1 つのバッチで送信し、次のようなものを生成する方法はありますか?
サンプルデータ:
2 つのレコードが存在する場合、コマンドの後に必要なデータ。
2 つのレコードが存在する場合、コマンドの後の実際のデータ。
event_id 1 のレコードのみが存在する場合、コマンドの後に必要なデータ。
event_id 1 のレコードのみが存在する場合のコマンド後の実際のデータ。
sql - Oracle および PL/SQL を使用した挿入または更新
目標の合計を維持し、既存の値と新しい値の差を返す Oracle データベースで更新/挿入を実行する PL/SQL 関数があります。
これが私がこれまでに持っているコードです:
これは、単体テストでは期待どおりに機能し、複数のスレッドが失敗することはありません。
ただし、ライブ システムにロードすると、次のようなスタック トレースで失敗することがわかりました。
行番号 (コンテキスト外では無意味なので削除しました) は、最初の更新がデータがないために失敗し、挿入が一意性のために失敗し、2 番目の更新がデータなしで失敗していることを確認します。これは不可能なはずです。
私が他のスレッドで読んだことから、MERGEステートメントもアトミックではなく、同様の問題が発生する可能性があります。
これを防ぐ方法を知っている人はいますか?
python - pymongo での高速または一括 Upsert
pymongoで一括アップサートを行うにはどうすればよいですか? 多数のエントリを更新したいのですが、一度に 1 つずつ実行すると非常に遅くなります。
ほぼ同じ質問に対する答えは次のとおりです: MongoDB での一括更新/アップサート?
受け入れられた答えは、実際には質問に答えません。インポート/エクスポートを行うための mongo CLI へのリンクを提供するだけです。
また、一括アップサートを行うことができない/ベストプラクティスではない理由を説明する人にもオープンですが、この種の問題に対する推奨される解決策は何かを説明してください.
sql - 行が FK によって参照されているときに UPSERT を実行する
アイテムのテーブルがあり、アイテムごとに追加情報が保存されているとします。これは 2 番目のテーブルに格納されます。追加情報は、最初のテーブルの FK によって参照されます。これは NULL にすることができます (アイテムに追加情報がない場合)。
アイテムの追加情報を更新するための「ベスト プラクティス」は何ですか (できれば IBM DB2 SQL で)?
これは UPSERT 操作である必要があります。つまり、追加情報がまだ存在しない場合は 2 番目のテーブルに新しいレコードが作成されますが、存在する場合は更新されるだけで、最初のテーブルの FK は変更されません。
必然的に、これはロジックです:
私の主な問題は、新しく挿入された addtl_info 行の ID (上記の下線付き) を取得する方法です。ストアド プロシージャでは、シーケンスから ID を要求して変数に格納できますが、もっと簡単な方法があるかもしれません。データベースをプログラミングしていると、いつも頭に浮かぶことではないでしょうか。
つまり、addtl_info レコードが一意であり、適切に参照されている限り、その ID が何であるかにはまったく関心がありません。したがって、この場合、シーケンスを使用するのは少しやり過ぎに思えます。
実際のところ、この UPSERT 操作は標準操作として SQL 言語の一部である必要があります (そうかもしれませんが、私はそれについて知りませんか?)...
php - レコードが存在する場合は更新し、そうでない場合は新しいレコードを書き込みますか?
このクエリを実行しようとしていますが、$ serialのレコードが見つかると、更新できます。または、シリアルが存在しない場合は、新しいレコードを書き込むことができます。
構文エラーが発生しますが、私には問題ないようです。ON DUPLICATE KEY UPDATEが進むべき道ですが、何かが足りません...
mysql - Drupal データベース API クエリ - 存在する場合は row.update、存在しない場合は row.insert
エントリが既に存在する場合はエントリを更新するか、存在しない場合は新しいエントリを挿入するクエリを drupal で実行しようとしています。現時点でのコードは次のようになります。
そのクエリでエラーが発生する理由がわかりません。エラーの数字はすべて正しい
このクエリは機能するはずですか、および/またはこれを drupal で処理するためのより良い方法はありますか?
sql - 「ON CONFLICT」句のセマンティクスを使用して行を挿入するpostgresqlの方法
postgres で sqlite で以下と同等のことを行う簡単な方法はありますか?
私は周りを見回しましたが、私が見つけた解決策は複雑なカスタム関数です。私の問題に対する他の解決策は、単に行うことです
これは意味的に同等ではありませんが、私の場合は機能します。
ON CONFLICT
カスタム関数を必要としない場合は、ルールを好むだけです。