COPY — 在文件和表之间复制数据
COPYtable_name
[ (column_name
[, ...] ) ] FROM { 'filename
' | PROGRAM 'command
' | STDIN } [ [ WITH ] (option
[, ...] ) ] [ WHEREcondition
] COPY {table_name
[ (column_name
[, ...] ) ] | (query
) } TO { 'filename
' | PROGRAM 'command
' | STDOUT } [ [ WITH ] (option
[, ...] ) ] whereoption
can be one of: FORMATformat_name
FREEZE [boolean
] DELIMITER 'delimiter_character
' NULL 'null_string
' DEFAULT 'default_string
' HEADER [boolean
| MATCH ] QUOTE 'quote_character
' ESCAPE 'escape_character
' FORCE_QUOTE { (column_name
[, ...] ) | * } FORCE_NOT_NULL { (column_name
[, ...] ) | * } FORCE_NULL { (column_name
[, ...] ) | * } ON_ERRORerror_action
ENCODING 'encoding_name
' LOG_VERBOSITYverbosity
COPY
在 PostgreSQL 表和标准文件系统文件之间移动数据。COPY TO
将表的内容复制到一个文件,而 COPY FROM
将数据从一个文件复制到一个表(将数据附加到表中已有的任何内容)。COPY TO
还可以复制 SELECT
查询的结果。
如果指定了列列表,则 COPY TO
仅将指定列中的数据复制到文件。对于 COPY FROM
,文件中的每个字段都按顺序插入到指定的列中。COPY FROM
列列表中未指定的表列将接收其默认值。
带有文件名的 COPY
指示 PostgreSQL 服务器直接从文件读取或写入文件。该文件必须可由 PostgreSQL 用户(服务器运行的用户 ID)访问,并且名称必须从服务器的角度指定。当指定 PROGRAM
时,服务器将执行给定的命令并从程序的标准输出读取,或者写入程序的标准输入。该命令必须从服务器的角度指定,并且可由 PostgreSQL 用户执行。当指定 STDIN
或 STDOUT
时,数据将通过客户端和服务器之间的连接传输。
每个运行 COPY
的后端都会在 pg_stat_progress_copy
视图中报告其进度。有关详细信息,请参见 第 27.4.3 节。
默认情况下,如果 COPY
在处理过程中遇到错误,它将失败。对于需要尽力尝试加载整个文件的情况,可以使用 ON_ERROR
子句来指定其他行为。
table_name
现有表的名称(可选的模式限定)。
column_name
要复制的可选列列表。如果未指定列列表,则将复制表的所有列,但生成的列除外。
query
一个 SELECT
、VALUES
、INSERT
、UPDATE
、DELETE
或 MERGE
命令,其结果将被复制。请注意,查询周围需要括号。
对于 INSERT
、UPDATE
、DELETE
和 MERGE
查询,必须提供 RETURNING
子句,并且目标关系不能有条件规则,也不能有扩展为多个语句的 ALSO
规则或 INSTEAD
规则。
filename
输入或输出文件的路径名。输入文件名可以是绝对路径或相对路径,但输出文件名必须是绝对路径。Windows 用户可能需要使用 E''
字符串并双倍使用路径名中使用的任何反斜杠。
PROGRAM
要执行的命令。在 COPY FROM
中,从命令的标准输出读取输入,而在 COPY TO
中,输出写入命令的标准输入。
请注意,该命令由 shell 调用,因此如果您需要传递来自不受信任来源的任何参数,则必须小心地去除或转义任何可能对 shell 具有特殊含义的特殊字符。出于安全原因,最好使用固定的命令字符串,或者至少避免在其中包含任何用户输入。
STDIN
指定输入来自客户端应用程序。
STDOUT
指定输出到客户端应用程序。
boolean
指定是否应启用或禁用所选选项。您可以写入 TRUE
、ON
或 1
来启用该选项,并写入 FALSE
、OFF
或 0
来禁用它。boolean
值也可以省略,在这种情况下,假定为 TRUE
。
FORMAT
选择要读取或写入的数据格式:text
、csv
(逗号分隔值)或 binary
。默认为 text
。
FREEZE
请求复制已冻结的行的数据,就像在运行 VACUUM FREEZE
命令后一样。这旨在作为初始数据加载的性能选项。只有在当前子事务中创建或截断了正在加载的表,没有打开的游标,并且此事务没有保留较旧的快照时,行才会被冻结。当前无法在分区表上执行 COPY FREEZE
。此选项仅在 COPY FROM
中允许。
请注意,一旦成功加载数据,所有其他会话将立即能够看到该数据。这违反了 MVCC 可见性的正常规则,用户应注意这可能造成的潜在问题。
DELIMITER
指定分隔文件中每行(行)中列的字符。默认情况下,文本格式为制表符,CSV
格式为逗号。这必须是单个单字节字符。使用 binary
格式时,不允许使用此选项。
NULL
指定表示空值的字符串。默认情况下,文本格式为 \N
(反斜杠 N),CSV
格式为未加引号的空字符串。在您不想区分空值和空字符串的情况下,您可能更喜欢文本格式中的空字符串。使用 binary
格式时,不允许使用此选项。
当使用 COPY FROM
时,任何与此字符串匹配的数据项都将存储为空值,因此您应确保使用与 COPY TO
相同的字符串。
DEFAULT
指定表示默认值的字符串。每次在输入文件中找到该字符串时,都将使用相应列的默认值。此选项仅在 COPY FROM
中允许,并且仅在不使用 binary
格式时允许。
HEADER
指定文件包含一个头行,其中包含文件中每列的名称。在输出时,第一行包含表中的列名称。在输入时,当此选项设置为 true
(或等效的布尔值)时,将丢弃第一行。如果此选项设置为 MATCH
,则头行中的列数和名称必须与表的实际列名称匹配,按顺序;否则会引发错误。使用 binary
格式时,不允许使用此选项。MATCH
选项仅对 COPY FROM
命令有效。
QUOTE
指定引用数据值时要使用的引号字符。默认为双引号。这必须是单个单字节字符。仅当使用 CSV
格式时才允许使用此选项。
ESCAPE
指定在匹配 QUOTE
值的 数据字符之前应出现的字符。默认值与 QUOTE
值相同(因此如果引号字符出现在数据中,则会重复)。这必须是单个单字节字符。此选项仅在使用 CSV
格式时允许。
FORCE_QUOTE
强制对每个指定列中所有非 NULL
值使用引号。 NULL
输出永远不会被引号括起来。如果指定了 *
,则所有列中的非 NULL
值都将被引号括起来。此选项仅在 COPY TO
中允许,并且仅在使用 CSV
格式时允许。
FORCE_NOT_NULL
不要将指定列的值与空字符串进行匹配。在空字符串为空的默认情况下,这意味着即使未加引号,空值也将被读取为零长度字符串而不是空值。如果指定了 *
,则该选项将应用于所有列。此选项仅在 COPY FROM
中允许,并且仅在使用 CSV
格式时允许。
FORCE_NULL
将指定列的值与空字符串进行匹配,即使它已被引号括起来,如果找到匹配项,则将值设置为 NULL
。在空字符串为空的默认情况下,这会将带引号的空字符串转换为 NULL。如果指定了 *
,则该选项将应用于所有列。此选项仅在 COPY FROM
中允许,并且仅在使用 CSV
格式时允许。
ON_ERROR
指定在将列的输入值转换为其数据类型时遇到错误时的行为方式。 error_action
值为 stop
表示命令失败,而 ignore
表示丢弃输入行并继续下一行。默认值为 stop
。
ignore
选项仅适用于 COPY FROM
且 FORMAT
为 text
或 csv
时。
如果至少有一行被丢弃,则在 COPY FROM
结束时会发出一个包含被忽略行数的 NOTICE
消息。当 LOG_VERBOSITY
选项设置为 verbose
时,对于每个被丢弃的行,都会发出一个 NOTICE
消息,其中包含输入文件的行和输入转换失败的列名。
ENCODING
指定文件以 encoding_name
编码。如果省略此选项,则使用当前客户端编码。有关更多详细信息,请参见下面的“备注”。
LOG_VERBOSITY
指定 COPY
命令发出的消息量:default
或 verbose
。如果指定了 verbose
,则在处理期间会发出其他消息。
当 ON_ERROR
选项设置为 ignore
时,目前在 COPY FROM
命令中使用此选项。
WHERE
可选的 WHERE
子句具有以下通用形式
WHERE condition
其中 condition
是任何计算结果为 boolean
类型的表达式。任何不满足此条件的行都不会插入到表中。如果将实际行值替换为任何变量引用时返回 true,则该行满足条件。
当前,不允许在 WHERE
表达式中使用子查询,并且评估看不到 COPY
本身所做的任何更改(当表达式包含对 VOLATILE
函数的调用时,这一点很重要)。
成功完成后,COPY
命令返回以下形式的命令标签
COPY count
其中 count
是复制的行数。
只有当命令不是 COPY ... TO STDOUT
或等效的 psql 元命令 \copy ... to stdout
时,psql 才会打印此命令标签。这是为了防止将命令标签与刚刚打印的数据混淆。
COPY TO
只能与普通表一起使用,而不能与视图一起使用,并且不从子表或子分区复制行。例如,COPY
复制的行与 table
TOSELECT * FROM ONLY
相同。语法 table
COPY (SELECT * FROM
可用于转储继承层次结构、分区表或视图中的所有行。table
) TO ...
COPY FROM
可以与普通表、外部表或分区表一起使用,也可以与具有 INSTEAD OF INSERT
触发器的视图一起使用。
您必须具有对 COPY TO
读取其值的表的选择权限,以及对 COPY FROM
向其中插入值的表的插入权限。拥有命令中列出的列的列权限就足够了。
如果为表启用了行级安全性,则相关的 SELECT
策略将应用于 COPY
语句。目前,对于具有行级安全性的表不支持 table
TOCOPY FROM
。请改用等效的 INSERT
语句。
COPY
命令中命名的文件由服务器直接读取或写入,而不是由客户端应用程序读取或写入。因此,它们必须位于数据库服务器计算机上或可由数据库服务器计算机访问,而不是客户端。它们必须可由 PostgreSQL 用户(服务器运行所用的用户 ID)访问并可读写,而不是客户端。类似地,使用 PROGRAM
指定的命令由服务器直接执行,而不是由客户端应用程序执行,并且必须可由 PostgreSQL 用户执行。命名文件或命令的 COPY
仅允许数据库超级用户或被授予角色 pg_read_server_files
、pg_write_server_files
或 pg_execute_server_program
之一的用户使用,因为它允许读取或写入服务器有权访问的任何文件或运行程序。
请不要将 COPY
与 psql 指令 \copy
混淆。\copy
调用 COPY FROM STDIN
或 COPY TO STDOUT
,然后在 psql 客户端可访问的文件中提取/存储数据。因此,当使用 \copy
时,文件可访问性和访问权限取决于客户端而不是服务器。
建议在 COPY
中使用的文件名始终指定为绝对路径。在 COPY TO
的情况下,服务器会强制执行此操作,但对于 COPY FROM
,您可以选择从相对路径指定的文件中读取。该路径将相对于服务器进程的工作目录(通常是集群的数据目录)进行解释,而不是客户端的工作目录。
使用 PROGRAM
执行命令可能会受到操作系统访问控制机制(例如 SELinux)的限制。
COPY FROM
将调用目标表上的任何触发器和检查约束。但是,它不会调用规则。
对于标识列,COPY FROM
命令将始终写入输入数据中提供的列值,类似于 INSERT
选项 OVERRIDING SYSTEM VALUE
。
COPY
输入和输出受 DateStyle
的影响。为了确保可移植到可能使用非默认 DateStyle
设置的其他 PostgreSQL 安装,应在使用 COPY TO
之前将 DateStyle
设置为 ISO
。避免使用设置为 sql_standard
的 IntervalStyle
转储数据也是一个好主意,因为具有不同 IntervalStyle
设置的服务器可能会错误解释负间隔值。
输入数据根据 ENCODING
选项或当前客户端编码进行解释,输出数据以 ENCODING
或当前客户端编码进行编码,即使数据不经过客户端,而是由服务器直接读取或写入文件。
COPY FROM
命令会在进行过程中将输入行物理插入到表中。如果命令失败,这些行将处于删除状态;这些行将不可见,但仍会占用磁盘空间。如果在大型复制操作中途发生故障,则可能会浪费大量磁盘空间。应使用 VACUUM
来回收浪费的空间。
FORCE_NULL
和 FORCE_NOT_NULL
可以同时在同一列上使用。这会导致将带引号的空字符串转换为空值,并将不带引号的空字符串转换为空字符串。
当使用 text
格式时,读取或写入的数据是一个文本文件,每行对应一个表行。行中的列由分隔符字符分隔。列值本身是由每个属性数据类型的输出函数生成的字符串,或可被输入函数接受的字符串。指定的空字符串用于代替为空的列。如果输入文件的任何行包含的列数多于或少于预期列数,则 COPY FROM
将引发错误。
数据的结尾可以用仅包含反斜杠句点 (\.
) 的单行表示。从文件读取时不需要数据结束标记,因为文件结尾完全可以满足要求;仅当使用 pre-3.0 客户端协议将数据复制到客户端应用程序或从客户端应用程序复制数据时才需要它。
反斜杠字符 (\
) 可在 COPY
数据中用于引用可能被视为行或列分隔符的数据字符。特别是,以下字符 必须 在作为列值的一部分出现时前面加上反斜杠:反斜杠本身、换行符、回车符和当前分隔符字符。
指定的空字符串由 COPY TO
发送,不添加任何反斜杠;相反,COPY FROM
会在删除反斜杠之前将输入与空字符串进行匹配。因此,诸如 \N
之类的空字符串不会与实际数据值 \N
(它将表示为 \\N
)混淆。
以下特殊的反斜杠序列被 COPY FROM
识别
序列 | 表示 |
---|---|
\b |
退格 (ASCII 8) |
\f |
换页 (ASCII 12) |
\n |
换行 (ASCII 10) |
\r |
回车 (ASCII 13) |
\t |
制表符 (ASCII 9) |
\v |
垂直制表符 (ASCII 11) |
\ digits |
反斜杠后跟一到三个八进制数字,指定具有该数字代码的字节 |
\x digits |
反斜杠 x 后跟一到两个十六进制数字,指定具有该数字代码的字节 |
目前,COPY TO
永远不会发出八进制或十六进制数字反斜杠序列,但它确实对那些控制字符使用上面列出的其他序列。
上面表中未提及的任何其他带反斜杠的字符都将被视为表示自身。但是,请注意不要不必要地添加反斜杠,因为这可能会意外生成与数据结束标记 (\.
) 或空字符串 (\N
,默认为) 匹配的字符串。这些字符串将在完成任何其他反斜杠处理之前被识别。
强烈建议生成 COPY
数据的应用程序将数据换行符和回车符分别转换为 \n
和 \r
序列。目前,可以使用反斜杠和回车符来表示数据回车符,并使用反斜杠和换行符来表示数据换行符。但是,这些表示形式在未来的版本中可能不被接受。如果 COPY
文件在不同的机器之间传输(例如,从 Unix 到 Windows 或反之亦然),它们也极易损坏。
所有反斜杠序列都在编码转换后进行解释。使用八进制和十六进制数字反斜杠序列指定的字节必须在数据库编码中构成有效的字符。
COPY TO
将以 Unix 风格的换行符(“\n
”)结束每一行。在 Microsoft Windows 上运行的服务器则输出回车符/换行符(“\r\n
”),但仅适用于 COPY
到服务器文件;为了跨平台的一致性,无论服务器平台如何,COPY TO STDOUT
始终发送 “\n
”。COPY FROM
可以处理以换行符、回车符或回车符/换行符结尾的行。为了减少由于未加反斜杠的换行符或原本作为数据的回车符而导致的错误风险,如果输入中的行尾符不完全相同,COPY FROM
将会报错。
此格式选项用于导入和导出许多其他程序(如电子表格)使用的逗号分隔值 (CSV
) 文件格式。它不使用 PostgreSQL 标准文本格式所使用的转义规则,而是生成并识别常见的 CSV
转义机制。
每个记录中的值由 DELIMITER
字符分隔。如果该值包含分隔符字符、QUOTE
字符、NULL
字符串、回车符或换行符,则整个值将以 QUOTE
字符为前缀和后缀,并且该值中出现的任何 QUOTE
字符或 ESCAPE
字符都将以转义字符作为前缀。您还可以使用 FORCE_QUOTE
在输出特定列中的非 NULL
值时强制使用引号。
CSV
格式没有标准的区分 NULL
值和空字符串的方法。PostgreSQL 的 COPY
通过使用引号来处理此问题。NULL
值作为 NULL
参数字符串输出,并且不加引号,而与 NULL
参数字符串匹配的非 NULL
值将加引号。例如,使用默认设置,NULL
值将写入为未加引号的空字符串,而空字符串数据值则使用双引号 ( ""
) 写入。读取值遵循类似的规则。您可以使用 FORCE_NOT_NULL
来防止对特定列进行 NULL
输入比较。您还可以使用 FORCE_NULL
将带引号的 null 字符串数据值转换为 NULL
。
由于反斜杠在 CSV
格式中不是特殊字符,因此结束数据标记 \.
也可能作为数据值出现。为避免任何误解,在输出时,作为单行条目出现的 \.
数据值会自动加上引号;在输入时,如果加上引号,则不会将其解释为结束数据标记。如果您正在加载由另一个应用程序创建的,并且可能包含值 \.
的单列未加引号的文件,则可能需要在输入文件中对该值加上引号。
在 CSV
格式中,所有字符都很重要。用空格或 DELIMITER
以外的任何字符包围的带引号的值将包含这些字符。如果您从某个系统导入数据,该系统使用空格将 CSV
行填充到某个固定宽度,则这可能会导致错误。如果出现这种情况,您可能需要在将数据导入 PostgreSQL 之前预处理 CSV
文件以删除尾随空格。
CSV
格式将识别并生成包含嵌入式回车符和换行符的带引号值的 CSV
文件。因此,这些文件不像文本格式文件那样严格地每行对应一个表行。
许多程序会生成奇怪且偶尔反常的 CSV
文件,因此文件格式与其说是标准,不如说是一种约定。因此,您可能会遇到一些无法使用此机制导入的文件,并且 COPY
可能会生成其他程序无法处理的文件。
binary
格式选项会导致所有数据都以二进制格式而不是文本格式存储/读取。它比文本和 CSV
格式稍快,但是二进制格式文件在跨机器架构和 PostgreSQL 版本之间的可移植性较差。此外,二进制格式非常特定于数据类型;例如,将二进制数据从 smallint
列输出并将其读入 integer
列将不起作用,即使在文本格式下可以正常工作。
binary
文件格式由文件头、零个或多个包含行数据的元组以及文件尾组成。标头和数据采用网络字节顺序。
7.4 之前的 PostgreSQL 版本使用不同的二进制文件格式。
文件头由 15 个字节的固定字段和可变长度的头扩展区域组成。固定字段为
11 字节序列 PGCOPY\n\377\r\n\0
— 请注意,零字节是签名的必需部分。(签名旨在允许轻松识别已被非 8 位干净传输损坏的文件。此签名将被行尾转换过滤器、丢弃的零字节、丢弃的高位或奇偶校验更改。)
32 位整数位掩码,用于表示文件格式的重要方面。位从 0(LSB)到 31(MSB)编号。请注意,此字段以网络字节顺序(最高有效字节优先)存储,与文件格式中使用的所有整数字段一样。位 16–31 保留用于表示关键的文件格式问题;如果读取器在此范围内发现设置了意外位,则应中止。位 0–15 保留用于表示向后兼容的格式问题;读取器应简单地忽略在此范围内设置的任何意外位。当前仅定义了一个标志位,其余位必须为零
如果为 1,则数据中包含 OID;如果为 0,则不包含。OID 系统列在 PostgreSQL 中不再受支持,但是该格式仍然包含指示符。
32 位整数,以字节为单位表示剩余标头的长度,不包括自身。当前,此值为零,并且第一个元组紧随其后。未来对该格式的更改可能会允许在标头中出现其他数据。读取器应默默地跳过任何它不知道如何处理的头扩展数据。
头扩展区域被设想为包含一系列自识别的块。标志字段不用于告诉读取器扩展区域中有什么内容。头扩展内容的具体设计留待以后版本发布。
此设计允许向后兼容的标头添加(添加标头扩展块,或设置低阶标志位)和不向后兼容的更改(设置高阶标志位以表示此类更改,并在需要时向扩展区域添加支持数据)。
每个元组都以一个 16 位整数开始,该整数表示元组中字段的数量。(目前,表中所有元组都将具有相同的计数,但这可能并不总是如此。)然后,针对元组中的每个字段重复,有一个 32 位长度字,后跟那么多字节的字段数据。(长度字本身不包含在内,并且可以为零。)作为一种特殊情况,-1 表示 NULL 字段值。在 NULL 情况下,后面没有值字节。
字段之间没有对齐填充或任何其他额外数据。
目前,二进制格式文件中的所有数据值都假定为二进制格式(格式代码为 1)。预计未来的扩展可能会添加一个标头字段,该字段允许指定每列的格式代码。
要确定实际元组数据的适当二进制格式,您应该参考 PostgreSQL 源代码,特别是每个列数据类型的 *send
和 *recv
函数(通常这些函数位于源发行版的 src/backend/utils/adt/
目录中)。
如果文件中包含 OID,则 OID 字段紧跟在字段计数字之后。它是正常字段,只是它不包含在字段计数中。请注意,当前版本的 PostgreSQL 不支持 oid 系统列。
文件尾由一个包含 -1 的 16 位整数字组成。这很容易与元组的字段计数字区分开来。
如果字段计数字既不是 -1 也不是预期的列数,则读取器应报告错误。这提供了一个额外的检查,以防止以某种方式与数据失去同步。
以下示例使用竖线 (|
) 作为字段分隔符将表复制到客户端
COPY country TO STDOUT (DELIMITER '|');
将数据从文件复制到 country
表中
COPY country FROM '/usr1/proj/bray/sql/country_data';
仅复制名称以“A”开头的国家/地区到文件中
COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/usr1/proj/bray/sql/a_list_countries.copy';
要复制到压缩文件中,您可以将输出通过管道传递给外部压缩程序。
COPY country TO PROGRAM 'gzip > /usr1/proj/bray/sql/country_data.gz';
以下是一个适合从 STDIN
复制到表中的数据示例。
AF AFGHANISTAN AL ALBANIA DZ ALGERIA ZM ZAMBIA ZW ZIMBABWE
请注意,每行上的空格实际上是一个制表符。
以下是相同的数据,以二进制格式输出。数据是在通过 Unix 实用程序 od -c
过滤后显示的。该表有三列;第一列类型为 char(2)
,第二列类型为 text
,第三列类型为 integer
。所有行的第三列都有一个空值。
0000000 P G C O P Y \n 377 \r \n \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 003 \0 \0 \0 002 A F \0 \0 \0 013 A 0000040 F G H A N I S T A N 377 377 377 377 \0 003 0000060 \0 \0 \0 002 A L \0 \0 \0 007 A L B A N I 0000100 A 377 377 377 377 \0 003 \0 \0 \0 002 D Z \0 \0 \0 0000120 007 A L G E R I A 377 377 377 377 \0 003 \0 \0 0000140 \0 002 Z M \0 \0 \0 006 Z A M B I A 377 377 0000160 377 377 \0 003 \0 \0 \0 002 Z W \0 \0 \0 \b Z I 0000200 M B A B W E 377 377 377 377 377 377
SQL 标准中没有 COPY
语句。
以下语法在 PostgreSQL 9.0 版本之前使用,并且仍然受支持
COPYtable_name
[ (column_name
[, ...] ) ] FROM { 'filename
' | STDIN } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'delimiter_character
' ] [ NULL [ AS ] 'null_string
' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote_character
' ] [ ESCAPE [ AS ] 'escape_character
' ] [ FORCE NOT NULLcolumn_name
[, ...] ] ] ] COPY {table_name
[ (column_name
[, ...] ) ] | (query
) } TO { 'filename
' | STDOUT } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'delimiter_character
' ] [ NULL [ AS ] 'null_string
' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote_character
' ] [ ESCAPE [ AS ] 'escape_character
' ] [ FORCE QUOTE {column_name
[, ...] | * } ] ] ]
请注意,在这种语法中,BINARY
和 CSV
被视为独立的关键字,而不是 FORMAT
选项的参数。
以下语法在 PostgreSQL 7.3 版本之前使用,并且仍然受支持
COPY [ BINARY ]table_name
FROM { 'filename
' | STDIN } [ [USING] DELIMITERS 'delimiter_character
' ] [ WITH NULL AS 'null_string
' ] COPY [ BINARY ]table_name
TO { 'filename
' | STDOUT } [ [USING] DELIMITERS 'delimiter_character
' ] [ WITH NULL AS 'null_string
' ]
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单来报告文档问题。