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

Reply via email to