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_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