Re: Wrong command name in writeable-CTE related error messages

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Markus Winand <markus(dot)winand(at)winand(dot)at>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Wrong command name in writeable-CTE related error messages
Date: 2023-05-23 17:40:00
Message-ID: 966768.1684863600@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Markus Winand <markus(dot)winand(at)winand(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2023-05-23 18:01:13 Re: memory leak in trigger handling (since PG12)
Previous Message Tristan Partin 2023-05-23 17:33:21 Use COPY for populating all pgbench tables