繁体   English   中英

在 PostgreSQL 中,如何使用 COPY 命令插入数据?

[英]In PostgreSQL, how to insert data with COPY command?

使用 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:

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) 语法。

您可以使用--inserts使用pg_dump生成数据。 看:

2.使用psql作为特权系统用户

使用psql在命令行上调用您的脚本。 作为系统用户postgres

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

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

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

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

3. 在具有特权数据库角色的数据库服务器上COPY

将您的数据移动到服务器上的单独文件中,例如“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_filespg_write_server_filespg_execute_server_program在 Postgres 11 中是新的。)

4. \copy在任何客户端上

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

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

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

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

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

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

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

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

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

psql的参数是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM