用COPY装载数据

用COPY装载数据

COPY FROM将文件或标准输入中的数据复制到表中,并将数据附加到表内容中。 COPY是非并行的:使用Greenplum master实例在单个进程中加载数据。建议仅对非常小的数据文件使用COPY

Master主机上的postgres进程必须可以访问COPY 源文件。指定相对于Master主机上的数据目录的COPY 源文件名,或指定绝对路径。

Greenplum使用客户端和master服务器之间的连接从STDINSTDOUT复制数据。

从文件装载

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参数,该参数指定输入数据的格式。可能的值为TEXTCSV(逗号分隔值)和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');