Fix the display of lock information for specktoken.
authorAmit Kapila <[email protected]>
Tue, 10 Jan 2023 03:23:12 +0000 (08:53 +0530)
committerAmit Kapila <[email protected]>
Tue, 10 Jan 2023 03:23:47 +0000 (08:53 +0530)
A transaction id is now displayed in the transactionid field and
speculative insertion token is displayed in the objid field.

Author: Sawada Masahiko
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/CAD21AoCEKxZztULP1CDm45aSNNR1QO-Bh1q6LMTspQ78PBuJrw@mail.gmail.com

doc/src/sgml/system-views.sgml
src/backend/utils/adt/lockfuncs.c

index 1d1b7de8f1e6807511ed2895c6d8862512cd8979..5b1c73269b94159258f759d274c4a9464c38f577 100644 (file)
    permanent transaction ID of the current holder of that row lock.
   </para>
 
+  <para>
+   A specualtive insertion lock consists of a transaction ID and a speculative
+   insertion token. The speculative insertion token is displayed in the
+   <structfield>objid</structfield> column.
+  </para>
+
   <para>
    Advisory locks can be acquired on keys consisting of either a single
    <type>bigint</type> value or two integer values.
index c8aac0694fec2a5f6d835ac6778c46ba28b56241..f9b9590997b9245b20bd78fe8bb53a71e8caceb9 100644 (file)
@@ -313,6 +313,18 @@ pg_lock_status(PG_FUNCTION_ARGS)
                nulls[8] = true;
                nulls[9] = true;
                break;
+           case LOCKTAG_SPECULATIVE_TOKEN:
+               values[6] =
+                   TransactionIdGetDatum(instance->locktag.locktag_field1);
+               values[8] = ObjectIdGetDatum(instance->locktag.locktag_field2);
+               nulls[1] = true;
+               nulls[2] = true;
+               nulls[3] = true;
+               nulls[4] = true;
+               nulls[5] = true;
+               nulls[7] = true;
+               nulls[9] = true;
+               break;
            case LOCKTAG_APPLY_TRANSACTION:
                values[1] = ObjectIdGetDatum(instance->locktag.locktag_field1);
                values[8] = ObjectIdGetDatum(instance->locktag.locktag_field2);