46

使用 PostgreSQL 数据库运行 1 个项目 NodeJs 时出现问题。尝试使用该COPY命令在 pgAdmin 中插入数据时出现错误。

COPY beer (name, tags, alcohol, brewery, id, brewery_id, image) FROM stdin;

Bons Voeux  blonde  9.5 Brasserie Dupont    250 130 generic.png

要点中的数据 :

这个错误:

ERROR: syntax error at or near "Bons"
SQL state: 42601
Character: 1967

我是这样创建数据库并执行文件.sql:

4

3 回答 3

69
COPY tbl FROM STDIN;

pgAdmin 不支持。
你会得到一个简单的语法错误,因为 Postgres 将数据作为 SQL 代码获取。

四种可能的解决方案:

1.改用多行INSERT

INSERT INTO beer(name, tags, alcohol, brewery, id, brewery_id, image)
VALUES 
  ('Bons Voeux', 'blonde', 9.5, 'Brasserie Dupont', 250, 130, 'generic.png')
, ('Boerke Blond', 'blonde', 6.8, 'Brouwerij Angerik', 233, 287 'generic.png')
;

请注意作为字符串或数字文字的值的不同 (SQL) 语法。

您可以pg_dump使用 using--inserts生成数据。有关的:

2.或者使用命令行调用你的脚本psql。作为系统用户postgres

psql -f beer.sql -U my_login_role -d db_name 

如果默认值没问题,可以省略数据库 ( -d) 和登录角色(用于“用户”)。-U语法示例:

确保有\.默认text格式的数据结束标记 ( )。(你有那个。)手册:

\.数据的结尾可以由仅包含反斜杠句点 ( )的单行表示。从文件中读取时不需要数据结束标记,因为文件结尾非常好;只有在使用 3.0 之前的客户端协议将数据复制到客户端应用程序或从客户端应用程序复制数据时才需要它。

3.或者将您的数据移动到服务器上的单独文件中,例如“beer_data.csv”并COPY .. FROM 'filename'在您的脚本中使用:

COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';

无论哪种方式都可以。不过,您需要超级用户权限。手册:

[...]COPY命名文件或命令只允许数据库超级用户或被授予默认角色之一的用户 pg_read_server_filespg_write_server_filespg_execute_server_program,因为它允许读取或写入任何文件或运行服务器有权访问的程序。

( pg_read_server_files,pg_write_server_files并且pg_execute_server_program在 Postgres 11 中是新的。)

4.或者使用psql 元命令读取客户端本地的文件。看:\copy

于 2015-08-28T20:22:04.777 回答
5

第一步是belgianbeers在 pgAdmin 上创建数据库。

然后打开提示符并运行psql -U postgres -d belgianbeers -a -f beers.sql

此命令行运行 e 更新数据库表。

注意:-U postgres= 指定postgres为用户名

于 2016-12-24T20:17:59.230 回答
1

我的解决方案:将 SQL 文件放在您的根目录中,例如C:\.

例如,我的数据库被调用cities,我的 SQL 文件是cidade.sql.

在 PostgreSQL 目录中的 BIN 文件夹中打开cmd并键入:

psql -U postgres -d cities < C:\cidade.sql

的论据psql是:

  • -U [user]
  • -d [database]

系统将提示您输入密码。不要忘记检查是否psql在您的环境变量%PATH%中。

于 2021-08-29T16:03:58.127 回答