INSERT ... ON CONFLICT(id)DO UPDATE ...構文をシーケンスIDで使用するにはどうすればよいですか?

user2109254

postgresql 9.5では、INSERT ... ON CONFLICT(id)DO UPDATE ...構文をシーケンスIDでどのように使用できますか?

tbltest次の列があるテーブル内

  • tbltest_ID
  • tbltest_Name
  • tbltest_Description

tbltest_ID自動インクリメントを行うデータベース内のシーケンスはどこにありますか。

以下は、更新に対して正常に機能します。IDが4のレコードを更新します。

INSERT INTO tbltest (
    tbltest_ID,
    tbltest_Name,
    tbltest_Description) 
VALUES 
(4, 'test name','test description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;

ただし、DBに挿入のシーケンスIDを作成させるには、ステートメントからID列を削除する必要があります。

INSERT INTO tbltest (
    tbltest_Name,
    tbltest_Description) 
VALUES 
('test name','test description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;

これは、複数のレコードを新しいレコードと既存のレコードを更新する場合に問題になります。ID列を削除するかのように、それらはすべて挿入されます。そのままにしておくと、各行のVALUES配列にID値を指定する必要があります。また、IDを定義するときは、シーケンス(dbの自動インクリメント)を指定する必要があります。 )は使用されなくなりました。

INSERT ... ON CONFLICT(id)DO UPDATE ...構文spostをシーケンスIDとともに使用して、新しいレコードと既存のレコードの両方を含むレコードのセットを挿入/更新するにはどうすればよいですか?

たとえば、次は機能しません。

INSERT INTO tbltest (
    tbltest_ID,
    tbltest_Name,
    tbltest_Description) 
VALUES 
(NULL, 'new record','new record description'),
(4, 'existing record name','existing record description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;

エラーをスローします:

エラー:列「tbltest_ID」のヌル値が非ヌル制約に違反しています

御時間ありがとうございます。

user2109254

わかりました。Neil Conwayからこの素晴らしい記事を読みました:http//www.neilconway.org/docs/sequences/

ここで、彼はDEFAULTキーワードの使用を示して、列のシーケンス値を使用するようにDBに指示します。

これが、現在機能する更新された例です。

INSERT INTO tbltest (
    tbltest_ID,
    tbltest_Name,
    tbltest_Description) 
VALUES 
(DEFAULT, 'new record','new record description'),
(4, 'existing record name','existing record description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;

これが誰かを助けることを願っています;-)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Postgres INSERT ON CONFLICT DO UPDATE vsINSERTまたはUPDATE

分類Dev

INSERTステートメントのOUTPUT句を使用してID値を取得するにはどうすればよいですか?

分類Dev

PHPのprepareステートメントを使用してinsert_idを取得するにはどうすればよいですか?

分類Dev

SQL ServerでINSERT、UPDATE、DELETE、SELECTステートメントのレートを取得するにはどうすればよいですか?

分類Dev

使用するIDのシーケンスを定義するにはどうすればよいですか?

分類Dev

使用するIDのシーケンスを定義するにはどうすればよいですか?

分類Dev

Core Dataで、Swift4で `if present update else insert`を実行するにはどうすればよいですか?

分類Dev

SETを使用してmysqlでLAST_INSERT_IDユーザー定義変数を作成するにはどうすればよいですか?

分類Dev

uuidをデフォルト値として使用するときにLAST_INSERT_ID()を使用するにはどうすればよいですか?

分類Dev

mysqlのupdate / insertを使用して削除前/削除後のトリガーを作成するにはどうすればよいですか?

分類Dev

Wordpressが新しい投稿にwp_insert_postを使用し、投稿の更新にwp_update_postを使用しようとしています-投稿IDが必要ですか?

分類Dev

最後の自動インクリメントを取得する-mysqli_insert_idを使用してクエリのテーブルを指定するにはどうすればよいですか?

分類Dev

入力変数を使用してsqlite3のUPDATEでIDを見つけるにはどうすればよいですか?

分類Dev

node.js mysql insert id-挿入クエリの外部に挿入IDを公開するにはどうすればよいですか?

分類Dev

ネストされた SELECT を使用した INSERT クエリで挿入された行の数を取得するにはどうすればよいですか? 影響を受けた_rows、result_id、num_rowsで運が悪い

分類Dev

データベースに依存せずに(Mockitoを使用して)Insert()、update()、delete()メソッドにJUnitテストを適用するにはどうすればよいですか?

分類Dev

テーブルから特定のmax(id)を使用してPostgreSQLのシーケンスを変更するにはどうすればよいですか?

分類Dev

1回のリクエストでINSERT / UPDATE IDを取得できますか?

分類Dev

1つのINSERTで複数の行の挿入IDを取得するにはどうすればよいですか?

分類Dev

HerokuアプリケーションIDを取得するにはどうすればよいですか?

分類Dev

LAST_INSERT_ID( `my_column` + 1)から式の値を取得するにはどうすればよいですか?

分類Dev

postgresでシーケンスをリセットし、id列に新しいデータを入力するにはどうすればよいですか?

分類Dev

Rを使用して、各IDの最大の連続シーケンスの開始と終了を見つけるにはどうすればよいですか?

分類Dev

HTMLテキストボックス要素のRazorC#構文を使用してID値を手動で作成するにはどうすればよいですか?

分類Dev

すべてのシーケンスが存在するすべてのIDの行を選択するにはどうすればよいですか?

分類Dev

ON CONFLICT(id)DO UPDATE SETは、DELPHI10.3.1のFireDACでは機能しません

分類Dev

verticaで最後に発行されたシーケンスIDを取得するにはどうすればよいですか?

分類Dev

Eloquent / Laravel: How to get last insert/update ID/instance of updateOrCreate()?

分類Dev

カスケード削除する親IDへの外部キーとして文字列を使用してEntityFramework Code Firstコレクションを構成するにはどうすればよいですか?

Related 関連記事

  1. 1

    Postgres INSERT ON CONFLICT DO UPDATE vsINSERTまたはUPDATE

  2. 2

    INSERTステートメントのOUTPUT句を使用してID値を取得するにはどうすればよいですか?

  3. 3

    PHPのprepareステートメントを使用してinsert_idを取得するにはどうすればよいですか?

  4. 4

    SQL ServerでINSERT、UPDATE、DELETE、SELECTステートメントのレートを取得するにはどうすればよいですか?

  5. 5

    使用するIDのシーケンスを定義するにはどうすればよいですか?

  6. 6

    使用するIDのシーケンスを定義するにはどうすればよいですか?

  7. 7

    Core Dataで、Swift4で `if present update else insert`を実行するにはどうすればよいですか?

  8. 8

    SETを使用してmysqlでLAST_INSERT_IDユーザー定義変数を作成するにはどうすればよいですか?

  9. 9

    uuidをデフォルト値として使用するときにLAST_INSERT_ID()を使用するにはどうすればよいですか?

  10. 10

    mysqlのupdate / insertを使用して削除前/削除後のトリガーを作成するにはどうすればよいですか?

  11. 11

    Wordpressが新しい投稿にwp_insert_postを使用し、投稿の更新にwp_update_postを使用しようとしています-投稿IDが必要ですか?

  12. 12

    最後の自動インクリメントを取得する-mysqli_insert_idを使用してクエリのテーブルを指定するにはどうすればよいですか?

  13. 13

    入力変数を使用してsqlite3のUPDATEでIDを見つけるにはどうすればよいですか?

  14. 14

    node.js mysql insert id-挿入クエリの外部に挿入IDを公開するにはどうすればよいですか?

  15. 15

    ネストされた SELECT を使用した INSERT クエリで挿入された行の数を取得するにはどうすればよいですか? 影響を受けた_rows、result_id、num_rowsで運が悪い

  16. 16

    データベースに依存せずに(Mockitoを使用して)Insert()、update()、delete()メソッドにJUnitテストを適用するにはどうすればよいですか?

  17. 17

    テーブルから特定のmax(id)を使用してPostgreSQLのシーケンスを変更するにはどうすればよいですか?

  18. 18

    1回のリクエストでINSERT / UPDATE IDを取得できますか?

  19. 19

    1つのINSERTで複数の行の挿入IDを取得するにはどうすればよいですか?

  20. 20

    HerokuアプリケーションIDを取得するにはどうすればよいですか?

  21. 21

    LAST_INSERT_ID( `my_column` + 1)から式の値を取得するにはどうすればよいですか?

  22. 22

    postgresでシーケンスをリセットし、id列に新しいデータを入力するにはどうすればよいですか?

  23. 23

    Rを使用して、各IDの最大の連続シーケンスの開始と終了を見つけるにはどうすればよいですか?

  24. 24

    HTMLテキストボックス要素のRazorC#構文を使用してID値を手動で作成するにはどうすればよいですか?

  25. 25

    すべてのシーケンスが存在するすべてのIDの行を選択するにはどうすればよいですか?

  26. 26

    ON CONFLICT(id)DO UPDATE SETは、DELPHI10.3.1のFireDACでは機能しません

  27. 27

    verticaで最後に発行されたシーケンスIDを取得するにはどうすればよいですか?

  28. 28

    Eloquent / Laravel: How to get last insert/update ID/instance of updateOrCreate()?

  29. 29

    カスケード削除する親IDへの外部キーとして文字列を使用してEntityFramework Code Firstコレクションを構成するにはどうすればよいですか?

ホットタグ

アーカイブ