5

我有以下脚本来创建表:

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

4

4 回答 4

11

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

于 2010-03-30T19:38:16.590 回答
3

要在 Ubuntu 上删除 BOM 序列,您可以使用 bomstrip、bomstrip-files

于 2010-07-22T11:43:01.420 回答
0

您使用什么版本(-s)?如果 EXISTS 随版本 8.2 一起提供,那么当您使用 psql 时,您可能连接到版本 8.1 或更早版本。

于 2010-03-30T19:06:46.107 回答
0

感谢你们。几个星期以来,我一直在努力解决这个问题。我无法使用 PSQL 运行我的 SQL 脚本。我以为我的操作系统有问题,现在我知道这是我的文本文件中的 BOM 问题。我在 Ubuntu 中安装了 bomstrip 数据包,现在我所有的 SQL 脚本都可以正常工作了。

于 2011-10-25T18:51:06.310 回答