[過去ログ]
PostgreSQL Part.11©2ch.net (1002レス)
上
下
前
次
1-
新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
961
: 2023/07/02(日)05:52 ID:???
AA×
[
240
|
320
|
480
|600|
原寸
|
JPG
|
べ
|
レス栞
|
レス消
]
961: [sage] 2023/07/02(日) 05:52:54.79 ID:??? insert into 〜 on conflict do updateでシーケンス値が増えるのが我慢できなくて insert into 〜 on conflict do update相当の処理をトランザクションで書いているのですが これって最終的にテーブルに対してACCESS exclusiveロック(selectすら妨害する最強ロック)をかける事が必須だったりしますか? 上記のクエリと同じ処理を行いたい場合、以下の処理を行う必要があると思います ・select文で該当の行が既にあるかをチェック ・select文の結果を見て、該当の行があればupdate ・select文の結果を見て、該当の行が無ければinsert トランザクション1と2が両方同じタイミングでselect文を発行して、どっちもresultが0だった場合、どっちもinsertをしようとしてしまう。 だからどちらか片方のselect文は、他のinsertが終わるまで待ってから行って、result 1を取得する必要がある。 最初は行ロックでいいかな?と思ったのですが、最初にselectをした段階で対象の行は「存在しない」ので行ロックがかけれません。 となると、対象のテーブルに一番強い権限のACCESS exclusiveロックをかける必要がある?と思います。 ですが、それだとdo updateとは無関係のただのselect文に対してもロックがかかってしまいます。 この一連のdo update〜の処理でだけ排他ロックをかけたいのですが、そんな事出来るのでしょうか? http://mevius.5ch.net/test/read.cgi/db/1462257753/961
でシーケンス値が増えるのが我慢できなくて 相当の処理をトランザクションで書いているのですが これって最終的にテーブルに対して ロックすら妨害する最強ロックをかける事が必須だったりしますか? 上記のクエリと同じ処理を行いたい場合以下の処理を行う必要があると思います 文で該当の行が既にあるかをチェック 文の結果を見て該当の行があれば 文の結果を見て該当の行が無ければ トランザクションとが両方同じタイミングで文を発行してどっちもがだった場合どっちもをしようとしてしまう だからどちらか片方の文は他のが終わるまで待ってから行って を取得する必要がある 最初は行ロックでいいかな?と思ったのですが最初にをした段階で対象の行は存在しないので行ロックがかけれません となると対象のテーブルに一番強い権限の ロックをかける必要がある?と思います ですがそれだと とは無関係のただの文に対してもロックがかかってしまいます この一連の の処理でだけ排他ロックをかけたいのですがそんな事出来るのでしょうか?
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 41 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
ぬこの手
ぬこTOP
0.081s