• David Rowley's avatar
    Fix missing calls to table_finish_bulk_insert during COPY, take 2 · f7c830f1
    David Rowley authored
    86b85044 abstracted calls to heap functions in COPY FROM to support a
    generic table AM.  However, when performing a copy into a partitioned
    table, this commit neglected to call table_finish_bulk_insert for each
    partition.  Before 86b85044, when we always called the heap functions,
    there was no need to call heapam_finish_bulk_insert for partitions since
    it only did any work when performing a copy without WAL.  For partitioned
    tables, this was unsupported anyway, so there was no issue.  With
    pluggable storage, we can't make any assumptions about what the table AM
    might want to do in its equivalent function, so we'd better ensure we
    always call table_finish_bulk_insert each partition that's received a row.
    
    For now, we make the table_finish_bulk_insert call whenever we evict a
    CopyMultiInsertBuffer out of the CopyMultiInsertInfo.  This does mean
    that it's possible that we call table_finish_bulk_insert multiple times
    per partition, which is not a problem other than being an inefficiency.
    Improving this requires a more invasive patch, so let's leave that for
    another day.
    
    This also changes things so that we no longer needlessly call
    table_finish_bulk_insert when performing a COPY FROM for a non-partitioned
    table when not using multi-inserts.
    
    Reported-by: Robert Haas
    Backpatch-through: 12
    Discussion: https://postgr.es/m/CA+TgmoYK=6BpxiJ0tN-p9wtH0BTAfbdxzHhwou0mdud4+BkYuQ@mail.gmail.com
    f7c830f1
copy.c 150 KB