使用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文档的任何信息。
答案 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)
引用: 带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。
如果要从本地计算机文件复制到服务器,请使用\ copy命令。