Re: Emitting JSON to file using COPY TO
От | jian he |
---|---|
Тема | Re: Emitting JSON to file using COPY TO |
Дата | |
Msg-id | CACJufxHd6ZRmJJBsDOGpovaVAekMS-u6AOrcw0Ja-Wyi-0kGtA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Emitting JSON to file using COPY TO (Alvaro Herrera <alvherre@alvh.no-ip.org>) |
Список | pgsql-hackers |
On Fri, Jan 19, 2024 at 4:10 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > if (opts_out->json_mode && is_from) > ereport(ERROR, ...); > > if (!opts_out->json_mode && opts_out->force_array) > ereport(ERROR, ...); > > Also these checks can be moved close to other checks at the end of > ProcessCopyOptions(). > > --- > @@ -3395,6 +3395,10 @@ copy_opt_item: > { > $$ = makeDefElem("format", (Node *) makeString("csv"), @1); > } > + | JSON > + { > + $$ = makeDefElem("format", (Node *) makeString("json"), @1); > + } > | HEADER_P > { > $$ = makeDefElem("header", (Node *) makeBoolean(true), @1); > @@ -3427,6 +3431,10 @@ copy_opt_item: > { > $$ = makeDefElem("encoding", (Node *) makeString($2), @1); > } > + | FORCE ARRAY > + { > + $$ = makeDefElem("force_array", (Node *) > makeBoolean(true), @1); > + } > ; > > I believe we don't need to support new options in old-style syntax. > you are right about the force_array case. we don't need to add force_array related changes in gram.y. On Wed, Jan 31, 2024 at 9:26 PM Alvaro Herrera <alvherre@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. > I am not sure what alternative you are referring to. I've rebased the patch, made some cosmetic changes. Now I think it's pretty neat. you can, based on it, make your change, then I may understand the alternative you are referring to.
Вложения
В списке pgsql-hackers по дате отправления: