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 格式使用逗号。这必须是单个单字节字符。此选项在使用二进制格式时不允许。
NULL
指定表示空值的字符串。默认情况下,文本格式使用 \N
(反斜杠-N),CSV 格式使用未引用的空字符串。对于不想区分空值和空字符串的情况,您可能更喜欢在文本格式中使用空字符串。此选项在使用二进制格式时不允许。
使用 COPY FROM
时,任何与该字符串匹配的数据项都将存储为空值,因此您应该确保使用与使用 COPY TO
时相同的字符串。
DEFAULT
指定表示默认值的字符串。每次在输入文件中找到该字符串时,将使用相应列的默认值。此选项仅在 COPY FROM
中允许,并且仅在不使用二进制格式时允许。
HEADER
指定文件包含带有文件中每列名称的标题行。在输出时,第一行包含表格中的列名称。在输入时,如果将此选项设置为 true
(或等效的布尔值),则第一行将被丢弃。如果将此选项设置为 MATCH
,则标题行中列的数量和名称必须与表格的实际列名称匹配,并且顺序相同;否则将引发错误。此选项在使用二进制格式时不允许。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
。
当 FORMAT
为 text
或 csv
时,ignore
选项仅适用于 COPY FROM
。
如果至少丢弃了一行,则在 COPY FROM
结束时将发出包含已丢弃行计数的 NOTICE
消息。当 LOG_VERBOSITY
选项设置为 verbose
时,将为每行丢弃的行发出包含输入文件行号和输入转换失败的列名称的 NOTICE
消息。
ENCODING
指定文件以 encoding_name
编码。如果省略此选项,则使用当前客户端编码。有关详细信息,请参见下面的说明。
LOG_VERBOSITY
指定 COPY
命令发出的消息量:default
或 verbose
。如果指定了 verbose
,则在处理过程中会发出更多消息。
目前,这在 COPY FROM
命令中使用,当 ON_ERROR
选项设置为 ignore
时。
WHERE
可选的 WHERE
子句具有以下通用形式
WHERE condition
其中 condition
是任何计算结果为 boolean
类型的表达式。任何不满足此条件的行都不会插入表中。如果在将实际行值代入任何变量引用时返回 true,则该行满足条件。
目前,WHERE
表达式中不允许使用子查询,并且评估不会看到 COPY
本身所做的任何更改(这在表达式包含对 VOLATILE
函数的调用时很重要)。
成功完成后,COPY
命令将返回以下形式的命令标签
COPY count
count
是复制的行数。
psql 仅在命令不是 COPY ... TO STDOUT
或等效的 psql 元命令 \copy ... to stdout
时才会打印此命令标签。这是为了防止将命令标签与刚刚打印的数据混淆。
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 用户(服务器运行的用户名)访问并可供其读取或写入,而不是客户端。同样,使用 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
。最好也避免使用 IntervalStyle
设置为 sql_standard
转储数据,因为负时间间隔值可能会被具有不同 IntervalStyle
设置的服务器误解。
输入数据根据 ENCODING
选项或当前客户端编码进行解释,输出数据以 ENCODING
或当前客户端编码编码,即使数据没有通过客户端,而是由服务器直接从文件读取或写入文件。
COPY FROM
命令在执行过程中将输入行物理地插入到表中。如果命令失败,这些行将处于已删除状态;这些行将不可见,但仍然占用磁盘空间。如果在大型复制操作中很早发生了失败,这可能会导致大量的磁盘空间浪费。应使用 VACUUM
来恢复浪费的空间。
FORCE_NULL
和 FORCE_NOT_NULL
可以同时在同一列上使用。这将导致将带引号的空字符串转换为空值,并将不带引号的空字符串转换为空字符串。
当使用 text
格式时,读取或写入的数据是一个文本文件,每行对应一个表行。一行中的列由分隔符字符分隔。列值本身是字符串,由每个属性的数据类型的输出函数生成,或可被其输入函数接受。指定的空字符串用于代替为 NULL 的列。如果输入文件的任何行包含的列数多于或少于预期,则 COPY FROM
将引发错误。
数据结束可以用包含单个反斜杠句点 (\.
) 的单行来表示。在从文件读取时,不需要数据结束标记,因为文件结束完全可以满足要求;它仅在使用 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 |
反斜杠后跟 1 到 3 个八进制数字指定具有该数字代码的字节 |
\x digits |
反斜杠 x 后跟 1 或 2 个十六进制数字指定具有该数字代码的字节 |
目前,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
。
由于反斜杠在 CSV
格式中不是特殊字符,因此 \.
(数据结束标记)也可能出现在数据值中。为了避免任何误解,以单行条目形式出现的 \.
数据值在输出时将自动加引号,而在输入时,如果加引号,则不会解释为数据结束标记。如果您正在加载由另一个应用程序创建的文件,该文件只有一个未加引号的列并且可能包含 \.
的值,您可能需要在输入文件中引用该值。
在 CSV
格式中,所有字符都很重要。被空格或除 DELIMITER
之外的任何字符包围的加引号的值将包含这些字符。如果您从将 CSV
行用空格填充到固定宽度的一些系统导入数据,这会导致错误。如果出现这种情况,您可能需要预处理 CSV
文件以删除尾随空格,然后再将数据导入 PostgreSQL。
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 字段紧随字段计数字之后。它是一个普通字段,只是不包含在字段计数中。请注意,OID 系统列在当前版本的 PostgreSQL 中不受支持。
文件尾部包含一个 16 位整数字,其中包含 -1。这很容易与元组的字段计数字区分开。
如果字段计数字既不是 -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
' ]
如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。