PostgreSQL COPY声明

时间:2012-01-03 12:37:45

标签: postgresql postgresql-copy

使用PostgreSQL的COPY语句,我们可以将文本文件中的数据加载到数据库的表中,如下所示:

COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.txt' DELIMITER AS '~'

上述语句是从具有postgresql客户端的机器运行的,其中服务器位于另一台Windows机器中。运行上述声明向我抱怨ERROR: could not open file "C:\Program Files\ERROR_CODES\errcodes.txt" for reading: No such file or directory

经过一些研究,我观察到COPY语句正在postgresql服务器的机器中以相同的路径(C:\ Program Files \ ERROR_CODES)查找加载器文件(errcodes.txt)。为了测试这个,我在postgresql服务器的机器上创建了相同的文件夹结构,并将errcodes.txt文件保存在那里。然后COPY声明运作良好。 COPY声明对我来说看起来非常严格。 是否需要设置以避免这种情况?或者是COPY声明的行为?我没有找到关于PostgreSQL文档的任何信息。

2 个答案:

答案 0 :(得分:2)

这是标准解决方案:

COPY foo (i, j, k) FROM stdin;
1<TAB>2<TAB>3
\.

必须正确转义数据并以制表符分隔。

实际上,它是在文档中,即使在语法定义中你也有STDIN ...参见:http://www.postgresql.org/docs/9.1/static/sql-copy.html

如果您使用某些支持COPY的编程语言,您将拥有pg_putcopy或类似功能。因此,您不必担心转义和连接。

提示如何在Python中手动执行此操作 - &gt; Recreating Postgres COPY directly in Python?

Perl方式 - &gt; http://search.cpan.org/dist/DBD-Pg/Pg.pm#COPY_support

希望这有帮助。

答案 1 :(得分:0)

来自documentation

引用: 带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。

如果要从本地计算机文件复制到服务器,请使用\ copy命令。