Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit31de7e6

Browse files
committed
Show savepoint names as constants in pg_stat_statements
In pg_stat_statements, savepoint names now show up as constants with aparameter symbol, using as base query string the one added as a newentry to the PGSS hash table, leading to:RELEASE $1ROLLBACK TO $1SAVEPOINT $1Applying constants to these query parts is a huge advantage forworkloads that generate randomly savepoint points, like ORMs (Django isat the origin of this patch). The ODBC driver is a second layer thatlikes a lot savepoints, though it does not use a random naming pattern.A "location" field is added to TransactionStmt, now set only forsavepoints. The savepoint name is ignored by the query jumbling. Thelocation can be extended to other query patterns, if required, like 2PCcommands. Some tests are added to pg_stat_statements for all the querypatterns supported by the parser.ROLLBACK, ROLLBACK TO SAVEPOINT and ROLLBACK TRANSACTION TO SAVEPOINThave the same Node representation, so all these are equivalents. Thesame happens for RELEASE and RELEASE SAVEPOINT.Author: Greg Sabino MullaneDiscussion:https://postgr.es/m/CAKAnmm+2s9PA4OaumwMJReWHk8qvJ_-g1WqxDRDAN1BSUfxyTw@mail.gmail.com
1 parent19c590f commit31de7e6

File tree

4 files changed

+66
-1
lines changed

4 files changed

+66
-1
lines changed

‎contrib/pg_stat_statements/expected/utility.out

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,37 @@ SELECT pg_stat_statements_reset();
197197

198198
(1 row)
199199

200+
-- Savepoints
201+
BEGIN;
202+
SAVEPOINT sp1;
203+
SAVEPOINT sp2;
204+
SAVEPOINT sp3;
205+
SAVEPOINT sp4;
206+
ROLLBACK TO sp4;
207+
ROLLBACK TO SAVEPOINT sp4;
208+
ROLLBACK TRANSACTION TO SAVEPOINT sp3;
209+
RELEASE sp3;
210+
RELEASE SAVEPOINT sp2;
211+
ROLLBACK TO sp1;
212+
RELEASE SAVEPOINT sp1;
213+
COMMIT;
214+
SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
215+
calls | rows | query
216+
-------+------+-----------------------------------
217+
1 | 0 | BEGIN
218+
1 | 0 | COMMIT
219+
3 | 0 | RELEASE $1
220+
4 | 0 | ROLLBACK TO $1
221+
4 | 0 | SAVEPOINT $1
222+
1 | 1 | SELECT pg_stat_statements_reset()
223+
(6 rows)
224+
225+
SELECT pg_stat_statements_reset();
226+
pg_stat_statements_reset
227+
--------------------------
228+
229+
(1 row)
230+
200231
-- EXPLAIN statements
201232
-- A Query is used, normalized by the query jumbling.
202233
EXPLAIN (costs off) SELECT 1;

‎contrib/pg_stat_statements/sql/utility.sql

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,23 @@ COMMIT;
115115
SELECT calls, rows, queryFROM pg_stat_statementsORDER BY query COLLATE"C";
116116
SELECT pg_stat_statements_reset();
117117

118+
-- Savepoints
119+
BEGIN;
120+
SAVEPOINT sp1;
121+
SAVEPOINT sp2;
122+
SAVEPOINT sp3;
123+
SAVEPOINT sp4;
124+
ROLLBACK TO sp4;
125+
ROLLBACK TO SAVEPOINT sp4;
126+
ROLLBACK TRANSACTION TO SAVEPOINT sp3;
127+
RELEASE sp3;
128+
RELEASE SAVEPOINT sp2;
129+
ROLLBACK TO sp1;
130+
RELEASE SAVEPOINT sp1;
131+
COMMIT;
132+
SELECT calls, rows, queryFROM pg_stat_statementsORDER BY query COLLATE"C";
133+
SELECT pg_stat_statements_reset();
134+
118135
-- EXPLAIN statements
119136
-- A Query is used, normalized by the query jumbling.
120137
EXPLAIN (costs off)SELECT1;

‎src/backend/parser/gram.y

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10841,6 +10841,7 @@ TransactionStmt:
1084110841
n->kind = TRANS_STMT_ROLLBACK;
1084210842
n->options = NIL;
1084310843
n->chain =$3;
10844+
n->location = -1;
1084410845
$$ = (Node *) n;
1084510846
}
1084610847
|STARTTRANSACTIONtransaction_mode_list_or_empty
@@ -10849,6 +10850,7 @@ TransactionStmt:
1084910850

1085010851
n->kind = TRANS_STMT_START;
1085110852
n->options =$3;
10853+
n->location = -1;
1085210854
$$ = (Node *) n;
1085310855
}
1085410856
|COMMITopt_transactionopt_transaction_chain
@@ -10858,6 +10860,7 @@ TransactionStmt:
1085810860
n->kind = TRANS_STMT_COMMIT;
1085910861
n->options = NIL;
1086010862
n->chain =$3;
10863+
n->location = -1;
1086110864
$$ = (Node *) n;
1086210865
}
1086310866
|ROLLBACKopt_transactionopt_transaction_chain
@@ -10867,6 +10870,7 @@ TransactionStmt:
1086710870
n->kind = TRANS_STMT_ROLLBACK;
1086810871
n->options = NIL;
1086910872
n->chain =$3;
10873+
n->location = -1;
1087010874
$$ = (Node *) n;
1087110875
}
1087210876
|SAVEPOINTColId
@@ -10875,6 +10879,7 @@ TransactionStmt:
1087510879

1087610880
n->kind = TRANS_STMT_SAVEPOINT;
1087710881
n->savepoint_name =$2;
10882+
n->location =@2;
1087810883
$$ = (Node *) n;
1087910884
}
1088010885
|RELEASESAVEPOINTColId
@@ -10883,6 +10888,7 @@ TransactionStmt:
1088310888

1088410889
n->kind = TRANS_STMT_RELEASE;
1088510890
n->savepoint_name =$3;
10891+
n->location =@3;
1088610892
$$ = (Node *) n;
1088710893
}
1088810894
|RELEASEColId
@@ -10891,6 +10897,7 @@ TransactionStmt:
1089110897

1089210898
n->kind = TRANS_STMT_RELEASE;
1089310899
n->savepoint_name =$2;
10900+
n->location =@2;
1089410901
$$ = (Node *) n;
1089510902
}
1089610903
|ROLLBACKopt_transactionTOSAVEPOINTColId
@@ -10899,6 +10906,7 @@ TransactionStmt:
1089910906

1090010907
n->kind = TRANS_STMT_ROLLBACK_TO;
1090110908
n->savepoint_name =$5;
10909+
n->location =@5;
1090210910
$$ = (Node *) n;
1090310911
}
1090410912
|ROLLBACKopt_transactionTOColId
@@ -10907,6 +10915,7 @@ TransactionStmt:
1090710915

1090810916
n->kind = TRANS_STMT_ROLLBACK_TO;
1090910917
n->savepoint_name =$4;
10918+
n->location =@4;
1091010919
$$ = (Node *) n;
1091110920
}
1091210921
|PREPARETRANSACTIONSconst
@@ -10915,6 +10924,7 @@ TransactionStmt:
1091510924

1091610925
n->kind = TRANS_STMT_PREPARE;
1091710926
n->gid =$3;
10927+
n->location = -1;
1091810928
$$ = (Node *) n;
1091910929
}
1092010930
|COMMITPREPAREDSconst
@@ -10923,6 +10933,7 @@ TransactionStmt:
1092310933

1092410934
n->kind = TRANS_STMT_COMMIT_PREPARED;
1092510935
n->gid =$3;
10936+
n->location = -1;
1092610937
$$ = (Node *) n;
1092710938
}
1092810939
|ROLLBACKPREPAREDSconst
@@ -10931,6 +10942,7 @@ TransactionStmt:
1093110942

1093210943
n->kind = TRANS_STMT_ROLLBACK_PREPARED;
1093310944
n->gid =$3;
10945+
n->location = -1;
1093410946
$$ = (Node *) n;
1093510947
}
1093610948
;
@@ -10942,6 +10954,7 @@ TransactionStmtLegacy:
1094210954

1094310955
n->kind = TRANS_STMT_BEGIN;
1094410956
n->options =$3;
10957+
n->location = -1;
1094510958
$$ = (Node *) n;
1094610959
}
1094710960
|END_Popt_transactionopt_transaction_chain
@@ -10951,6 +10964,7 @@ TransactionStmtLegacy:
1095110964
n->kind = TRANS_STMT_COMMIT;
1095210965
n->options = NIL;
1095310966
n->chain =$3;
10967+
n->location = -1;
1095410968
$$ = (Node *) n;
1095510969
}
1095610970
;

‎src/include/nodes/parsenodes.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3538,9 +3538,12 @@ typedef struct TransactionStmt
35383538
NodeTagtype;
35393539
TransactionStmtKindkind;/* see above */
35403540
List*options;/* for BEGIN/START commands */
3541-
char*savepoint_name;/* for savepoint commands */
3541+
/* for savepoint commands */
3542+
char*savepoint_namepg_node_attr(query_jumble_ignore);
35423543
char*gid;/* for two-phase-commit related commands */
35433544
boolchain;/* AND CHAIN option */
3545+
/* token location, or -1 if unknown */
3546+
intlocationpg_node_attr(query_jumble_location);
35443547
}TransactionStmt;
35453548

35463549
/* ----------------------

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp