PostgreSQL 导入 CSV 文件

FreeBSD 7.0-RELEASE-i386 + PostgreSQL8.3
# psql -d 数据库 -U 用户名
# \encoding
# show client_encoding;
# set client_encoding = 'iso-8859-1'; //CSV文件字符格式,不然会乱码
# COPY 表名 FROM 'CSV文件' WITH DELIMITER ',' NULL AS '' CSV HEADER QUOTE AS '|';
# \q
COPY命令:

COPY tablename [ ( column [, ...] ) ]
    FROM { 'filename' | STDIN }
    [ [ WITH ]
          [ BINARY ]
          [ OIDS ]
          [ DELIMITER [ AS ] 'delimiter' ]
          [ NULL [ AS ] 'null string' ]
          [ CSV [ HEADER ]
                [ QUOTE [ AS ] 'quote' ]
                [ ESCAPE [ AS ] 'escape' ]
                [ FORCE NOT NULL column [, ...] ]

COPY tablename [ ( column [, ...] ) ]
    TO { 'filename' | STDOUT }
    [ [ WITH ]
          [ BINARY ]
          [ OIDS ]
          [ DELIMITER [ AS ] 'delimiter' ]
          [ NULL [ AS ] 'null string' ]
          [ CSV [ QUOTE [ AS ] 'quote' ]
                [ ESCAPE [ AS ] 'escape' ]
                [ FORCE QUOTE column [, ...] ]
描述

COPY 在 PostgreSQL表和标准文件系统文件之间交换数据。 COPY TO 把一个表的所有内容都拷贝到一个文件, 而 COPY FROM 从一个文件里拷贝数据到一个表里(把数据附加到表中已经存在的内容里)。

如果声明了一个字段列表,COPY 将只在文件和表之间拷贝声明的字段的数据。 如果表中有任何不在字段列表里的字段,那么 COPY FROM 将为那些字段插入缺省值。

带文件名的 COPY 指示 PostgreSQL 服务器直接从文件中读写数据。 如果声明了文件名,那么该文件必须为服务器可见,而且文件名必须从服务器的角度声明。如果声明的是 STDIN 或 STDOUT,数据通过连接在客户前端和服务器之间流动。
参数

tablename

    现存表的名字(可以有模式修饰)。 
column

    可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段。 
filename

    输入或输出文件的绝对路径名。 
STDIN

    声明输入是来自客户端应用。 
STDOUT

    声明输入前往客户端应用。 
BINARY

    使用二进制格式存储和读取,而不是以文本的方式。 在二进制模式下,不能声明 DELIMITERS,NULL 或者 CSV 选项。 
OIDS

    声明为每行拷贝内部对象标识(OID)。 (如果给那些没有 OID 的表声明了 OIDS 选项,则抛出一个错误。) 
delimiter

    用于在文件中每行中分隔各个字段的单个字符。 在文本模式下,缺省是水平制表符(tab),在 CSV 模式下是一个逗号。 
null string

    这是一个代表 NULL 值的字串。在文本模式下缺省是 \N (反斜杠-N), 在 CSV 模式下是一个没有引号的空值。 如果你不想区分空值和空字串,那么即使在文本模式下可能你也会用一个空字串。

        注意: 在使用 COPY FROM 的时候,任何匹配这个字串的字串将被存储为 NULL 值, 所以你应该确保你用的字串和COPY TO相同。 

CSV

    打开逗号分隔变量(CSV)模式。 
HEADER

    声明文件包含一个头标识行,包含文件中每个字段的名字。 输出时,的一行包含表的字段名,输入时,第一行被忽略。 
quote

    声明 CSV 模式里的引号字符。缺省是双引号。 
escape

    声明在 CSV 模式下应该出现在数据里 QUOTE 字符值前面的字符。 缺省是 QUOTE 值(通常是双引号)。 
FORCE QUOTE

    在 CSV COPY TO 模式下,强制在每个声明的字段周围对所有非 NULL 值都使用引号包围。 NULL 从不会被引号包围。 
FORCE NOT NULL

    在 CSV COPY FROM 模式下,把声明的每个字段都当作它们有引号包围来处理, 因此就没有 NULL 值。对于在 CSV 模式下的缺省空字串('copy '), 这样导致一个缺失的数值当作一个零长字串输入。
Mr Wang

王炜,现在福建泉州从事 B2C 电子商务。爱好编程,业余时间在 FreeBSD / Apache / PHP / PostgerSQL 平台开发 B/S 架构的免费软件。

Follow Google Buzz Twitter Facebook Sina

收藏王炜's Blog

Bookmark and Share

关于此日记

此日记由 王炜 发表于 2009年11月29日 09:11

此Blog上的上一篇日记FreeBSD 8.0 Firefox 安装 Flash 插件

此Blog上的下一篇日记GRUB 引导 8.0-RELEASE-i386-bootonly.iso 安装 FreeBSD 8.0

首页归档页可以看到最新的日记和所有日记。