Citus Notes: COPY
(These are some notes I took while studying Citus code, so it is probably more detail oriented than higher picture oriented).
Citus overrides the utility hook with multi_ProcessUtility
. This function calls ProcessCopyStmt()
for COPY statements, which calls CitusCopyFrom()
, which calls CopyToExistingShards()
.
CopyToExistingShards()
uses the postgres/src/include/commands/copy.h
API to read tuples:
BeginCopyFrom()
NextCopyFrom()
EndCopyFrom()
and it uses the CitusCopyDestReceiver
API to write tuples. CitusCopyDestReceiver
is a specialization of postgres’ DataReceiver, which contains the following methods:
rStartup
/rShutdown
: per-executor-run initialization and shutdownrDestroy
: destroy the object itself.receiveSlot
: called for each tuple to be output.