Commit 87985cc
committed
Allow locking updated tuples in tuple_update() and tuple_delete()
Currently, in read committed transaction isolation mode (default), we have the
following sequence of actions when tuple_update()/tuple_delete() finds
the tuple updated by the concurrent transaction.
1. Attempt to update/delete tuple with tuple_update()/tuple_delete(), which
returns TM_Updated.
2. Lock tuple with tuple_lock().
3. Re-evaluate plan qual (recheck if we still need to update/delete and
calculate the new tuple for update).
4. Second attempt to update/delete tuple with tuple_update()/tuple_delete().
This attempt should be successful, since the tuple was previously locked.
This commit eliminates step 2 by taking the lock during the first
tuple_update()/tuple_delete() call. The heap table access method saves some
effort by checking the updated tuple once instead of twice. Future
undo-based table access methods, which will start from the latest row version,
can immediately place a lock there.
Also, this commit makes tuple_update()/tuple_delete() optionally save the old
tuple into the dedicated slot. That saves efforts on re-fetching tuples in
certain cases.
The code in nodeModifyTable.c is simplified by removing the nested switch/case.
Discussion: https://postgr.es/m/CAPpHfdua-YFw3XTprfutzGp28xXLigFtzNbuFY8yPhqeq6X5kg%40mail.gmail.com
Reviewed-by: Aleksander Alekseev, Pavel Borisov, Vignesh C, Mason Sharp
Reviewed-by: Andres Freund, Chris Travers1 parent c7076ba commit 87985cc
File tree
9 files changed
+502
-346
lines changed- src
- backend
- access
- heap
- table
- commands
- executor
- include
- access
- commands
9 files changed
+502
-346
lines changedLarge diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
48 | 54 | | |
49 | 55 | | |
50 | 56 | | |
| |||
300 | 306 | | |
301 | 307 | | |
302 | 308 | | |
303 | | - | |
304 | | - | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
305 | 312 | | |
| 313 | + | |
| 314 | + | |
306 | 315 | | |
307 | 316 | | |
308 | 317 | | |
309 | 318 | | |
310 | 319 | | |
311 | | - | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
312 | 349 | | |
313 | 350 | | |
314 | 351 | | |
315 | 352 | | |
316 | 353 | | |
317 | 354 | | |
318 | | - | |
319 | | - | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
320 | 358 | | |
321 | 359 | | |
322 | 360 | | |
| |||
326 | 364 | | |
327 | 365 | | |
328 | 366 | | |
329 | | - | |
330 | | - | |
| 367 | + | |
| 368 | + | |
331 | 369 | | |
332 | 370 | | |
333 | 371 | | |
| |||
354 | 392 | | |
355 | 393 | | |
356 | 394 | | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
357 | 420 | | |
358 | 421 | | |
359 | 422 | | |
| |||
365 | 428 | | |
366 | 429 | | |
367 | 430 | | |
368 | | - | |
369 | 431 | | |
370 | 432 | | |
371 | 433 | | |
| |||
375 | 437 | | |
376 | 438 | | |
377 | 439 | | |
378 | | - | |
379 | | - | |
380 | | - | |
| 440 | + | |
| 441 | + | |
381 | 442 | | |
382 | 443 | | |
383 | 444 | | |
384 | 445 | | |
385 | 446 | | |
386 | 447 | | |
387 | 448 | | |
388 | | - | |
389 | | - | |
390 | 449 | | |
391 | 450 | | |
392 | 451 | | |
| |||
408 | 467 | | |
409 | 468 | | |
410 | 469 | | |
| 470 | + | |
| 471 | + | |
411 | 472 | | |
412 | 473 | | |
413 | 474 | | |
| |||
502 | 563 | | |
503 | 564 | | |
504 | 565 | | |
505 | | - | |
| 566 | + | |
506 | 567 | | |
507 | 568 | | |
508 | 569 | | |
| |||
513 | 574 | | |
514 | 575 | | |
515 | 576 | | |
516 | | - | |
| 577 | + | |
517 | 578 | | |
518 | 579 | | |
519 | 580 | | |
| |||
566 | 627 | | |
567 | 628 | | |
568 | 629 | | |
569 | | - | |
570 | | - | |
571 | | - | |
572 | 630 | | |
573 | 631 | | |
574 | 632 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | | - | |
| 290 | + | |
| 291 | + | |
291 | 292 | | |
292 | 293 | | |
293 | 294 | | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
294 | 300 | | |
295 | 301 | | |
296 | 302 | | |
297 | 303 | | |
298 | | - | |
299 | | - | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
300 | 307 | | |
301 | 308 | | |
302 | 309 | | |
| |||
335 | 342 | | |
336 | 343 | | |
337 | 344 | | |
338 | | - | |
| 345 | + | |
| 346 | + | |
339 | 347 | | |
340 | 348 | | |
341 | 349 | | |
342 | 350 | | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
343 | 356 | | |
344 | 357 | | |
345 | 358 | | |
346 | 359 | | |
347 | | - | |
348 | | - | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
349 | 363 | | |
350 | 364 | | |
351 | 365 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2773 | 2773 | | |
2774 | 2774 | | |
2775 | 2775 | | |
2776 | | - | |
2777 | 2776 | | |
| 2777 | + | |
2778 | 2778 | | |
2779 | 2779 | | |
2780 | 2780 | | |
| |||
2783 | 2783 | | |
2784 | 2784 | | |
2785 | 2785 | | |
2786 | | - | |
2787 | | - | |
2788 | | - | |
2789 | | - | |
2790 | | - | |
2791 | | - | |
2792 | | - | |
2793 | | - | |
2794 | | - | |
2795 | | - | |
2796 | | - | |
2797 | | - | |
2798 | | - | |
2799 | | - | |
| 2786 | + | |
| 2787 | + | |
| 2788 | + | |
| 2789 | + | |
| 2790 | + | |
2800 | 2791 | | |
2801 | 2792 | | |
2802 | 2793 | | |
| |||
3087 | 3078 | | |
3088 | 3079 | | |
3089 | 3080 | | |
3090 | | - | |
3091 | | - | |
3092 | | - | |
3093 | | - | |
3094 | | - | |
| 3081 | + | |
| 3082 | + | |
| 3083 | + | |
| 3084 | + | |
3095 | 3085 | | |
3096 | 3086 | | |
3097 | 3087 | | |
3098 | 3088 | | |
3099 | 3089 | | |
3100 | | - | |
3101 | 3090 | | |
| 3091 | + | |
3102 | 3092 | | |
3103 | 3093 | | |
3104 | 3094 | | |
| |||
3117 | 3107 | | |
3118 | 3108 | | |
3119 | 3109 | | |
3120 | | - | |
3121 | | - | |
3122 | | - | |
3123 | 3110 | | |
3124 | 3111 | | |
3125 | 3112 | | |
3126 | | - | |
3127 | | - | |
3128 | | - | |
3129 | | - | |
3130 | | - | |
3131 | | - | |
3132 | | - | |
3133 | | - | |
3134 | | - | |
3135 | | - | |
3136 | | - | |
3137 | | - | |
3138 | | - | |
3139 | | - | |
| 3113 | + | |
| 3114 | + | |
| 3115 | + | |
3140 | 3116 | | |
3141 | | - | |
3142 | | - | |
| 3117 | + | |
3143 | 3118 | | |
3144 | 3119 | | |
3145 | 3120 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
577 | 577 | | |
578 | 578 | | |
579 | 579 | | |
| 580 | + | |
580 | 581 | | |
581 | 582 | | |
582 | 583 | | |
| |||
590 | 591 | | |
591 | 592 | | |
592 | 593 | | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
593 | 598 | | |
594 | | - | |
| 599 | + | |
595 | 600 | | |
596 | 601 | | |
597 | 602 | | |
| |||
602 | 607 | | |
603 | 608 | | |
604 | 609 | | |
605 | | - | |
| 610 | + | |
606 | 611 | | |
607 | 612 | | |
608 | 613 | | |
| |||
636 | 641 | | |
637 | 642 | | |
638 | 643 | | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
639 | 650 | | |
640 | | - | |
| 651 | + | |
641 | 652 | | |
642 | 653 | | |
643 | 654 | | |
644 | | - | |
| 655 | + | |
645 | 656 | | |
646 | 657 | | |
647 | 658 | | |
| |||
0 commit comments