12

PostgreSQLの挿入はROWEXCLUSIVEロックを使用することを理解しています。つまり、挿入を並列化でき、1つの挿入でテーブル全体がロックされないということですか?

問題のテーブルには、DBの外部で生成された主キーがあり、追加のインデックスはありません(ただし、そうでない場合はどうなるのか興味があります)。

編集1:

ドキュメントによると、ROW EXCLUSIVEは、CREATEINDEXによって取得されるSHAREと競合します。

これは、テーブルにインデックスがある場合、挿入によってテーブル全体がロックされることを意味しますか?

または、インデックスを最初に作成するときにのみテーブルがロックされますか?

また、私が今理解しているように、主キーはインデックスでもありますよね?

4

1 に答える 1

14

競合するキーを一意のインデックスに挿入しない限り、同時挿入は互いにブロックされるべきではありません。その場合、2 番目の挿入は、最初の挿入を含むトランザクションがコミットまたはロールバックされるのを待ってから、中止するか続行します。主キーは一意のインデックスとして実装されます。

一意でないインデックスによって、追加のロック競合が発生することはありません。インデックスを作成すると、テーブルへの挿入と更新がブロックされますがconcurrently、コマンドに追加するだけでこれを回避できますが、速度が低下します。

于 2013-01-26T01:16:36.617 に答える