Re: Emitting JSON to file using COPY TO - Mailing list pgsql-hackers

From jian he
Subject Re: Emitting JSON to file using COPY TO
Date
Msg-id CACJufxFFZqxC3p4WjpTEi4riaJm=pADX+py0yQ0=RWTn5cqK3Q@mail.gmail.com
Whole thread
In response to Re: Emitting JSON to file using COPY TO  (Andrew Dunstan <andrew@dunslane.net>)
Responses Re: Emitting JSON to file using COPY TO
List pgsql-hackers
hi.

V27-0002 is still not bullet-proof.

drop table if exists t1;
create table t1(a int);
insert into t1 values (1);
copy (select * from t1) to stdout json;
{"a":1}
WARNING:  resource was not closed: TupleDesc 0x7171d0ca3440 (18239,-1)

Also see ExecAssignScanProjectionInfo->ExecConditionalAssignProjectionInfo
So in v28-0002, I changed to
+    /*
+     * composite_to_json() requires a stable TupleDesc. Since the slot's
+     * descriptor (slot->tts_tupleDescriptor) can change during the execution
+     * of a SELECT query, we use cstate->queryDesc->tupDesc instead. This
+     * precaution is only necessary when the output slot's TupleDesc is of
+     * type RECORDOID.
+     */
+    if (!cstate->rel && slot->tts_tupleDescriptor->tdtypeid == RECORDOID)
+        slot->tts_tupleDescriptor = cstate->queryDesc->tupDesc;


+ cstate->json_projvalues = (Datum *) palloc(natts * sizeof(Datum));
+ cstate->json_projnulls = (bool *) palloc(natts * sizeof(bool));
I changed it to
+            cstate->json_projvalues = palloc_array(Datum, natts);
+            cstate->json_projnulls = palloc_array(bool, natts);

+ rowdata = HeapTupleHeaderGetDatum(tup->t_data);
I changed it to
+        rowdata = HeapTupleGetDatum(tup);

Patch v28-0004 adds the json_projvalues and json_projnulls pointers to struct
CopyToStateData. I wondered if adding these would slow the COPY TO with TEXT and
CSV format, so I ran a quick test using a 36-column table.

Surprisingly, v28 actually make COPY TO with TEXT and CSV performs a little bit
faster. But I didn't find out why.
You may also try the attached test script: copyto_json_perfomance_test.nocfbot.



--
jian
https://www.enterprisedb.com/

Attachment

pgsql-hackers by date:

Previous
From: Alexandre Felipe
Date:
Subject: Addressing buffer private reference count scalability issue
Next
From: Andres Freund
Date:
Subject: Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?