在PostgreSQL中使用STDIN的COPY


14

我刚开始使用Postgres,并且试图创建一个示例数据库来了解其功能,环顾四周,我在pgfoundry.org中找到了一些脚本。我理解这些命令,因为我以前使用过Oracle和MS-SQL,但是我正在运行的所有脚本在到达“ COPY FROM”指令时都会返回错误。更准确地说,该错误将引发在应该插入给定表中的第一个元素上。

我尝试将脚本同时作为查询和pgScripts运行,但是在两种方式下,我在COPY FROM之后的第一行都遇到了错误。

我正在使用pgAdminIII,并使用StackBuilder将PostgreSQL 9.2.4.1安装为数据库驱动程序。我是否可能缺少一些基本配置,从而无法运行此命令,或者我只是不了解它们的工作方式?

编辑:
错误是:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

文本在哪里:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`

1
欢迎来到dba.SE。您需要将(verbatim)错误消息包含在这样的问题中。如果您的语言环境不是非英语的,则可以在运行脚本之前在会话中将其重置,以获取默认的英语错误消息:SET lc_messages = C只需在“包含”会话的SQL编辑器窗口中运行它即可。
Erwin Brandstetter

谢谢,我正在尝试找出如何更改语言环境,一旦弄清楚如何做到这一点,我将包括错误消息。
Eugenio Laghi 2013年

1
哦,我忘了单引号:SET lc_messages = 'C'
Erwin Brandstetter

Answers:


10

是看到pgscript的pgAdmin本地脚本扩展,你很可能就不会想在这里。

pgAdmin是一个GUI,而不是控制台应用程序-没有stdin您可以轻松使用的。如果需要stdin流式传输内容,请使用psql(这是一个控制台应用程序)-与\copypsqlmeta命令一起使用

如果您有一个文件(显然是这样做的),只需使用COPYpgAdmin中的SQL :

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

该文件需要postgres系统用户可读。

有关此详细信息的更多信息,请访问pgAdmin支持列表


好的,您是说我应该使用以下行来运行脚本psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql吗?另外,我只是在本地尝试所有操作,所以我刚刚在笔记本电脑上安装了pgAdmin。
Eugenio Laghi 2013年

1
@EugenioLaghi:不完全是。psql -f将执行一个SQL脚本文件。您似乎正在处理数据文件。我更新了答案。
Erwin Brandstetter

谢谢!刚开始我试图执行脚本,但是现在至少我想出了如何从文件中复制数据!昨天晚上,我太累了,无法理解.. :)
Eugenio Laghi 2013年

您如何确保postgres用户可以读取该文件。我为txt文件(甚至是我的桌面(文件所在的位置))实现了这一点,但是该权限仍然被拒绝。

@Geo:请开始一个新问题,包括Postgres版本,操作系统,文件所在的位置,您使用的逐字记录命令以及更多相关信息……
Erwin Brandstetter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.