Postgresql 通过psql运行SQL脚本会产生语法错误,这些语法错误不会';不在PgAdmin中出现

Postgresql 通过psql运行SQL脚本会产生语法错误,这些语法错误不会';不在PgAdmin中出现,postgresql,syntax-error,byte-order-mark,Postgresql,Syntax Error,Byte Order Mark,我使用以下脚本创建表: -- 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-CreateState

我使用以下脚本创建表:

-- 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时会出现语法错误?

您使用的是哪个版本(-s)?如果8.2版附带EXISTS,那么当您使用psql时,您可能正在连接8.1版或更高版本。

通过十六进制转储程序运行文件00101-CreateStateTable.sql。我打赌你在文件的开头(在“-”注释字符之前)有一个UTF-16标记。

要删除Ubuntu上的BOM序列,你可以使用bomstrip,bomstrip文件

谢谢大家。我为这个问题挣扎了几个星期。我无法使用PSQL运行我的SQL脚本。我以为我的操作系统有一些问题,现在我知道这是我文本文件中的BOM问题。我在Ubuntu中安装了bomstrip包,现在我所有的SQL脚本都可以正常工作了

0000000 ef bb bf 2d 20 43 72 65 61 74 65 20 53 74 61 00000 10 74 65 20 74 61 62 6c 65 2 E 0a 44 52 4f 50 20 54 00000 20 41 42 4c 45 20 49 46 20 45 58 53 53 20 22 00000 30 74 74 61 74 65 22 43 43 43 44 44 3b 0a 00000 40 43 52 45 45 45 45 54 41 42 4c 45 20 22 22 22 22 0a 09 53 74 61 74 74 74 65 49 20 00000 60 5345 52 49 41 4c 20 50 52 49 4d 41 52 59 20 4b 00000 70 45 59 20 4e 4f 54 20 4e 55 4c 2c 0a 09 53 74 00000 80 61 74 65 4e 61 6d 65 20 56 41 52 43 48 41 52 28 00000 90 35 30 29 0a 29 3b 00000 96这对你有什么意义吗?这是OSX hextdump在该文件上的输出我刚刚使用文本编辑器的一个功能打开了该文件使用UTF-16编码。这显示了奇怪的字符。当使用UTF-8打开时,它显示良好。我认为你是对的。我使用UTF-8 no BOM(字节顺序标记)保存了文件,语法顺序消失了。是的,就是这样。具有讽刺意味的是,人们用于此类脚本的编辑器(pgadmin)在没有BOM表的情况下不会保存它们。疯子