On Wed, Jan 31, 2024 at 9:26 PM Alvaro Herrera <alvhe...@alvh.no-ip.org> wrote: > > On 2024-Jan-23, jian he wrote: > > > > + | FORMAT_LA copy_generic_opt_arg > > > + { > > > + $$ = makeDefElem("format", $2, @1); > > > + } > > > ; > > > > > > I think it's not necessary. "format" option is already handled in > > > copy_generic_opt_elem. > > > > test it, I found out this part is necessary. > > because a query with WITH like `copy (select 1) to stdout with > > (format json, force_array false); ` will fail. > > Right, because "FORMAT JSON" is turned into FORMAT_LA JSON by parser.c > (see base_yylex there). I'm not really sure but I think it might be > better to make it "| FORMAT_LA JSON" instead of invoking the whole > copy_generic_opt_arg syntax. Not because of performance, but just > because it's much clearer what's going on. >
sorry to bother you. Now I didn't apply any patch, just at the master. I don't know much about gram.y. copy (select 1) to stdout with (format json1); ERROR: COPY format "json1" not recognized LINE 1: copy (select 1) to stdout with (format json1); ^ copy (select 1) to stdout with (format json); ERROR: syntax error at or near "format" LINE 1: copy (select 1) to stdout with (format json); ^ json is a keyword. Is it possible to escape it? make `copy (select 1) to stdout with (format json)` error message the same as `copy (select 1) to stdout with (format json1)`