Fix performance problem with new COPY DEFAULT code
9f8377f7a
added code to allow COPY FROM insert a column's default value when the input matches the DEFAULT string specified in the COPY command. Here we fix some inefficient code which needlessly palloc0'd an array to store if we should use the default value or input value for the given column. This array was being palloc0'd and pfree'd once per row. It's much more efficient to allocate this once and just reset the values once per row. Reported-by: Masahiko Sawada Author: Masahiko Sawada Discussion: https://postgr.es/m/CAD21AoDvDmUQeJtZrau1ovnT_smN940%3DKp6mszNGK3bq9yRN6g%40mail.gmail.com Backpatch-through: 16, where9f8377f7a
was introduced.
This commit is contained in:
parent
f6a84546b1
commit
b635ac03e8
|
@ -1609,6 +1609,7 @@ BeginCopyFrom(ParseState *pstate,
|
|||
}
|
||||
}
|
||||
|
||||
cstate->defaults = (bool *) palloc0(tupDesc->natts * sizeof(bool));
|
||||
|
||||
/* initialize progress */
|
||||
pgstat_progress_start_command(PROGRESS_COMMAND_COPY,
|
||||
|
|
|
@ -871,7 +871,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
|
|||
/* Initialize all values for row to NULL */
|
||||
MemSet(values, 0, num_phys_attrs * sizeof(Datum));
|
||||
MemSet(nulls, true, num_phys_attrs * sizeof(bool));
|
||||
cstate->defaults = (bool *) palloc0(num_phys_attrs * sizeof(bool));
|
||||
MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
|
||||
|
||||
if (!cstate->opts.binary)
|
||||
{
|
||||
|
@ -1040,8 +1040,6 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
|
|||
&nulls[defmap[i]]);
|
||||
}
|
||||
|
||||
pfree(cstate->defaults);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue