my_obj
2つのフィールドを持つテーブルがvalue_a varchar(5)
あり、value_b varchar(5)
実際、2 つの値はそれほど変わらず、ペアにグループ化できます。せいぜい、最大数が 100 ペア未満になります。それどころか、私は数百万のレコードを持っていmy_obj
ます。
すべてのクエリが干渉しvalue_a
、value_b
非常に長い時間がかかります。value_a
そこで、フィールドとを使用して、考えられるすべてのペアのテーブル ペアを作成することにしましたvalue_b
。その結果、テーブルにフィールド id_pair を追加しましたmy_obj
。
テーブル ペアをすべてのペアで埋めました。問題ありません。my_obj
そこで、次のコマンドを使用して、それに応じてテーブルを更新したいと思いました。
update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b;
クエリが長時間起動されている間に、実行したselect count(*) from my_obj where id_pair > 0;
ところ、返されました0
そのため、更新クエリに問題がありました。
EDIT / NB:トランザクションユニットであるplpgsql関数は、トランザクションの最後にコミットを実行するため、関数を中断してからテーブルに変更が見られないの
は完全に正常でした。
の主キーの条件で更新クエリを変更して、1 つのレコードに対して 1my_obj
つだけ実行するようにしました。update
update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b
where o.id = 1234567; -- 1234567 being the key of an existing record
驚くべきことに、レコードを 1 つだけにするこのクエリを起動すると、永遠update
にかかるようです。
私は何を間違っていますか?