用COPY装载数据
COPY FROM
将文件或标准输入中的数据复制到表中,并将数据附加到表内容中。 COPY
是非并行的:使用Greenplum master实例在单个进程中加载数据。建议仅对非常小的数据文件使用COPY
。
Master主机上的postgres
进程必须可以访问COPY
源文件。指定相对于Master主机上的数据目录的COPY
源文件名,或指定绝对路径。
Greenplum使用客户端和master服务器之间的连接从STDIN
或STDOUT
复制数据。
Parent topic: 装载和卸载数据
从文件装载
COPY
命令要求postgres
后端打开指定的文件,读取文件并将其附加到表中。为了能够读取文件,后端需要具有对文件的可读权限,并且必须使用master主机上的绝对路径或master数据目录的相对路径来指定文件名。
COPY table_name FROM /path/to/filename;
从STDIN装载
为避免在加载数据之前将数据文件复制到master主机的问题,COPY FROM STDIN
使用标准输入通道并将数据直接提供给postgres
后端。 COPY FROM STDIN
命令启动后,后端将接受数据行,直到一行只包含反斜杠句点(\.)。
COPY table_name FROM STDIN;
在psql中使用\copy装载数据
不要将psql\copy
命令与COPY
SQL命令混淆。 \copy
调用常规COPY FROM STDIN
并将数据从psql客户端发送到后端。 因此,任何文件都必须驻留在运行psql客户端的主机上,并且必须可由运行客户端的用户访问。
为避免在加载数据之前将数据文件复制到master主机的问题,COPY FROM STDIN
使用标准输入通道并将数据直接提供给postgres
后端。 COPY FROM STDIN
命令启动后,后端将接受数据行,直到一行只包含反斜杠句点(\.)。psql将所有这些包装到handy
\copy
命令中
\copy table_name FROM filename;
输入格式
COPY FROM
接受FORMAT
参数,该参数指定输入数据的格式。可能的值为TEXT
,CSV
(逗号分隔值)和BINARY
。
COPY table_name FROM /path/to/filename WITH (FORMAT csv);
FORMAT csv
将读取逗号分隔值。默认情况下,FORMAT text
使用制表符来分隔值,DELIMITER
选项将不同的字符指定为值分隔符。
COPY table_name FROM /path/to/filename WITH (FORMAT text, DELIMITER '|');
默认情况下,使用默认客户端编码,可以使用ENCODING
选项更改此编码。这对于来自其他操作系统的数据会非常有用。
COPY table_name FROM /path/to/filename WITH (ENCODING 'latin1');