I said:
> ... So I had
> been thinking of pulling it out to postgres.c anyway. I will do that.
I did this and ended up with a rather long list of statement types that
might need a snapshot:
elog(DEBUG2, "ProcessUtility");
/* set snapshot if utility stmt needs one */
/* XXX maybe cleaner to list those that shouldn't set one? */
if (IsA(utilityStmt, AlterTableStmt) ||
IsA(utilityStmt, ClusterStmt) ||
IsA(utilityStmt, CopyStmt) ||
IsA(utilityStmt, ExecuteStmt) ||
IsA(utilityStmt, ExplainStmt) ||
IsA(utilityStmt, IndexStmt) ||
IsA(utilityStmt, PrepareStmt) ||
IsA(utilityStmt, ReindexStmt))
SetQuerySnapshot();
(Anything that can call the planner or might create entries in
functional indexes had better set a snapshot, thus stuff like
ReindexStmt has the issue.)
I wonder if we should turn this around, and set a snapshot for all
utility statements that can't show cause why they don't need one.
Offhand, TransactionStmt, FetchStmt, and VariableSet/Show/Reset
might be the only ones that need be excluded. Comments?
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/users-lounge/docs/faq.html