Markus Winand <markus.win...@winand.at> writes: > I noticed that errors due to writable CTEs in read-only or non-volatile > context say the offensive command is SELECT.
Good point. > My first thought was that these error messages should mention INSERT, but > after looking into the source I’m not sure anymore. The name of the command > is obtained from CreateCommandName(). After briefly looking around it doesn’t > seem to be trivial to introduce something along the line of > CreateModifyingCommandName(). Yeah, you would have to inspect the plan tree pretty carefully to determine that. Given the way the test is written, maybe it'd make sense to forget about mentioning the command name, and instead identify the table we are complaining about: ERROR: table "foo" cannot be modified in a read-only transaction I don't see any huge point in using PreventCommandIfReadOnly if we go that way, so no refactoring is needed: just test XactReadOnly directly. regards, tom lane