0

使用 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 文档的任何信息。

4

2 回答 2

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 中手动执行此操作 ->直接在 Python 中重新创建 Postgres COPY?

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

希望这可以帮助。

于 2012-01-03T15:27:02.683 回答
0

文档

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

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

于 2012-01-03T15:24:57.093 回答