通过 psql 运行 SQL 脚本会出现 PgAdmin 中不会出现的语法错误
我有以下脚本来创建表:
-- Create State table.
DROP TABLE IF EXISTS "State" CASCADE;
CREATE TABLE "State" (
StateID SERIAL PRIMARY KEY NOT NULL,
StateName VARCHAR(50)
);
它在 PgAdmin 的查询工具中运行良好。但是当我尝试使用 psql 从命令行运行它时:
psql -U postgres -d dbname -f 00101-CreateStateTable.sql
我收到语法错误,如下所示。
2: ERROR: syntax error at or near ""
LINE 1:
^
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE will create implicit sequence "State_stateid_seq" for serial column "State.stateid"
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "State_pkey" for table "State"
CREATE TABLE
为什么使用 psql 会出现语法错误,而使用 pgAdmin 则不会?
I have the following script to create a table:
-- Create State table.
DROP TABLE IF EXISTS "State" CASCADE;
CREATE TABLE "State" (
StateID SERIAL PRIMARY KEY NOT NULL,
StateName VARCHAR(50)
);
It runs fine in the query tool of PgAdmin. But when I try to run it from the command line using psql:
psql -U postgres -d dbname -f 00101-CreateStateTable.sql
I get a syntax error as shown below.
2: ERROR: syntax error at or near ""
LINE 1:
^
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE will create implicit sequence "State_stateid_seq" for serial column "State.stateid"
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "State_pkey" for table "State"
CREATE TABLE
Why do I get a syntax error using psql and not with pgAdmin?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
通过十六进制转储程序运行文件 00101-CreateStateTable.sql。我敢打赌,文件开头(“--”注释字符之前)有一个 UTF-16 标记。
Run your file 00101-CreateStateTable.sql through a hex dumper. I'll bet you have a UTF-16 marker at the beginning of the file (before the "--" comment characters).
要在 Ubuntu 上删除 BOM 序列,您可以使用 bomstrip、bomstrip-files
To remove BOM sequence on Ubuntu you can use bomstrip, bomstrip-files
您使用什么版本? IF EXISTS 随版本 8.2 一起提供,也许您在使用 psql 时连接的是 8.1 或更早版本。
What version(-s) do you use? IF EXISTS came with version 8.2, maybe you're connection with version 8.1 or older when you use psql.
谢谢你们。我已经为这个问题苦苦挣扎了几个星期。我无法使用 PSQL 运行 SQL 脚本。我以为我的操作系统有一些问题,现在我知道这是我的文本文件中的 BOM 问题。我在 Ubuntu 中安装了 bomstrip 数据包,现在我所有的 SQL 脚本都再次运行了。
Thank you guys. I have been struggling with this issue for a few weeks. I could not run my SQL scripts using PSQL. I thought I have some issues with my OS, now I know it is the BOM issue in my text file. I installed bomstrip packet in Ubuntu and now all my SQL scripts are working again.