Re: BUG #18664: Assert in BeginCopyTo() fails when source DML query rewritten with notifying rule
Tender Wang <tndrwang@gmail.com>
From: Tender Wang <tndrwang@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2024-10-22T01:38:49Z
Lists: pgsql-bugs
Tom Lane <tgl@sss.pgh.pa.us> 于2024年10月22日周二 01:30写道: > Tender Wang <tndrwang@gmail.com> writes: > > PG Bug reporting form <noreply@postgresql.org> 于2024年10月21日周一 19:32写道: > >> The following script: > >> CREATE TABLE t(i int); > >> CREATE RULE r AS ON INSERT TO t DO INSTEAD NOTIFY c; > >> COPY (INSERT INTO t VALUES (1)) TO stdout; > >> > >> triggers an Assert in BeginCopyTo(): > > > I take a quick look. It seems 92e38182d ignored this case. > > I gave a fix that remove the Assert and add an Assert in another if > blocks. > > Any thoughts? > > I don't like this fix, because the error message is just completely > misleading for this case. "COPY query must have a RETURNING clause" > makes it look like your mistake was to not write > > COPY (INSERT INTO t VALUES (1) RETURNING *) TO stdout; > > Of course doing that will fix nothing, and you'd still get the exact > same error message, leaving the user quite confused. So I think > it's worth issuing a more specific message. > Agree. > > I also noted somebody's faulty grammar in the nearby message > "DO ALSO rules are not supported for the COPY". > > So I think we want the attached. I went back and forth about > whether to make the new message be specifically "COPY query must > not be NOTIFY", but decided that we'd surely forget to update it > if we ever allow any other sort of utility command in rules. > So better to word it generically. > LGTM -- Thanks, Tender Wang
Commits
-
Fix wrong assertion and poor error messages in "COPY (query) TO".
- c80a1e048397 15.9 landed
- beab395a42b2 13.17 landed
- 6c3b2d204f2b 16.5 landed
- 6a57a457cf7d 12.21 landed
- 68ad9816c189 18.0 landed
- 5e94f616c832 14.14 landed
- 3685ad6188c1 17.1 landed