1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/*-------------------------------------------------------------------------
*
* copyapi.h
* API for COPY TO/FROM handlers
*
*
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* src/include/commands/copyapi.h
*
*-------------------------------------------------------------------------
*/
#ifndef COPYAPI_H
#define COPYAPI_H
#include "commands/copy.h"
/*
* API structure for a COPY TO format implementation. Note this must be
* allocated in a server-lifetime manner, typically as a static const struct.
*/
typedef struct CopyToRoutine
{
/*
* Set output function information. This callback is called once at the
* beginning of COPY TO.
*
* 'finfo' can be optionally filled to provide the catalog information of
* the output function.
*
* 'atttypid' is the OID of data type used by the relation's attribute.
*/
void (*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
FmgrInfo *finfo);
/*
* Start a COPY TO. This callback is called once at the beginning of COPY
* TO.
*
* 'tupDesc' is the tuple descriptor of the relation from where the data
* is read.
*/
void (*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
/*
* Write one row stored in 'slot' to the destination.
*/
void (*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
/*
* End a COPY TO. This callback is called once at the end of COPY TO.
*/
void (*CopyToEnd) (CopyToState cstate);
} CopyToRoutine;
/*
* API structure for a COPY FROM format implementation. Note this must be
* allocated in a server-lifetime manner, typically as a static const struct.
*/
typedef struct CopyFromRoutine
{
/*
* Set input function information. This callback is called once at the
* beginning of COPY FROM.
*
* 'finfo' can be optionally filled to provide the catalog information of
* the input function.
*
* 'typioparam' can be optionally filled to define the OID of the type to
* pass to the input function.'atttypid' is the OID of data type used by
* the relation's attribute.
*/
void (*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
FmgrInfo *finfo, Oid *typioparam);
/*
* Start a COPY FROM. This callback is called once at the beginning of
* COPY FROM.
*
* 'tupDesc' is the tuple descriptor of the relation where the data needs
* to be copied. This can be used for any initialization steps required by
* a format.
*/
void (*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
/*
* Read one row from the source and fill *values and *nulls.
*
* 'econtext' is used to evaluate default expression for each column that
* is either not read from the file or is using the DEFAULT option of COPY
* FROM. It is NULL if no default values are used.
*
* Returns false if there are no more tuples to read.
*/
bool (*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
Datum *values, bool *nulls);
/*
* End a COPY FROM. This callback is called once at the end of COPY FROM.
*/
void (*CopyFromEnd) (CopyFromState cstate);
} CopyFromRoutine;
#endif /* COPYAPI_H */
|