24 postgresql bulk-load pgadmin postgresql-copy
使用PostgreSQL数据库运行1个项目NodeJ时遇到问题.尝试使用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
Run Code Online (Sandbox Code Playgroud)
这个数据在 要点:
这个错误:
ERROR: syntax error at or near "Bons"
SQL state: 42601
Character: 1967
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 34
COPY tbl FROM STDIN;Run Code Online (Sandbox Code Playgroud)
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')
;
Run Code Online (Sandbox Code Playgroud)
请注意值的不同(SQL)语法为字符串或数字文字.
您可以生成数据pg_dump使用--inserts.有关:
2.或者使用命令行调用脚本psql.作为系统用户postgres:
psql -f beer.sql -U my_login_role -d db_name
Run Code Online (Sandbox Code Playgroud)
如果默认值正常,则可以省略Database(-d)和登录角色(-U对于"User").语法示例:
确保\.默认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';
Run Code Online (Sandbox Code Playgroud)
哪种方式都有效.但是,您需要超级用户权限.手册:
[...]
COPY命名文件或命令只允许谁被授予默认角色的一个数据库超级用户或用户pg_read_server_files,pg_write_server_files或者pg_execute_server_program,因为它可以读取或写入任何文件或运行服务器有权限访问的程序.
(pg_read_server_files,pg_write_server_files并且pg_execute_server_program是Postgres 11中的新内容.)
4.或者使用psql元命令读取客户端本地文件.看到:\copy
小智 5
第一步是belgianbeers在 pgAdmin 上创建数据库。
然后打开提示并运行 psql -U postgres -d belgianbeers -a -f beers.sql
此命令行运行 e 更新数据库表。
注意:-U postgres= 指定postgres为用户名
| 归档时间: |
|
| 查看次数: |
38938 次 |
| 最近记录: |