使用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
此数据在 gist:
此错误:
ERROR: syntax error at or near "Bons"
SQL state: 42601
Character: 1967
答案 0 :(得分:27)
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
)。 (你有。)The manual:
数据结尾可以用包含just的单行表示 反斜杠期(
\.
)。当时,不需要数据结束标记 从文件中读取,因为文件末尾非常好;它 仅在使用时从客户端应用程序复制数据时才需要 3.0之前的客户端协议。
3. 或者将您的数据移至单独的文件 在服务器上 ,例如'beer_data.csv'并使用{{1}在你的脚本中:
COPY .. FROM 'filename'
哪种方式都有效。但是,您需要超级用户权限。 The manual:
[...]
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image) FROM '/path/to/beer_data.csv';
仅允许数据库超级用户命名文件或命令 或被授予默认角色之一的用户COPY
,pg_read_server_files
或pg_write_server_files
,因为它允许读取或写入任何文件 或者运行服务器有权访问的程序。
(pg_execute_server_program
,pg_read_server_files
和pg_write_server_files
是Postgres 11中的新功能。)
4. 或使用psql meta-command \copy
读取客户端的本地文件。参见:
答案 1 :(得分:4)
第一步:
在pgAdmin上创建数据库belgianbeers。
第二步: 打开提示并运行此命令行:
psql -U postgres -d belgianbeers -a -f beers.sql
此命令行运行e update database tables。
-U =用户名postgres