Hi,
While testing “[21c69dc73] Disallow system columns in COPY FROM WHERE conditions”, I noticed an issue. This is not a
correctnessbug, but I think the user experience is not good.
See this repro:
```
evantest=# create sequence s;
CREATE SEQUENCE
evantest=# copy s from stdin where tableoid is null;
ERROR: system columns are not supported in COPY FROM WHERE conditions
DETAIL: Column "tableoid" is a system column.
```
Here, it reports an error about the WHERE clause. Okay, then I remove the WHERE clause:
```
evantest=# copy s from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> ddd
>> ^CERROR: cannot copy to sequence "s"
```
It only fails with the root problem, “cannot copy to sequence”, after I type in the content I want to copy. I think
thatis too late. A better user experience would be to raise the root error before checking the WHERE clause and before
waitingfor any input.
Similar masking can also happen with other checks, such as generated columns in COPY FROM WHERE conditions (v19 new)
andCOPY FROM on tables with row-level security.
I tried a solution that splits the target relation pre-checks out of CopyFrom() and calls the pre-check earlier. With
thispatch, if a user copies to an unsupported target, such as a sequence, the command fails immediately without
analyzingthe WHERE clause or waiting for input.
See the attached patch for details.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/