HeidiSQL生成了以下创建代码:
CREATE TABLE "books" (
"id" BIGINT NOT NULL,
"creation_date" TIMESTAMP NOT NULL,
"symbol" VARCHAR NOT NULL,
PRIMARY KEY ("id"),
UNIQUE INDEX "symbol" ("symbol")
)
;
COMMENT ON COLUMN "books"."id" IS E'';
COMMENT ON COLUMN "books"."creation_date" IS E'';
COMMENT ON COLUMN "books"."symbol" IS E'';
当我尝试提交时,出现以下错误:
这是PostgreSQL的HeidiSQL错误吗?
答案 0 :(得分:3)
关于如何在PostgreSQL中创建UNIQUE INDEX
的问题,有recommendation note:
向表添加唯一约束的首选方法是ALTER TABLE ... ADD CONSTRAINT。使用索引强制实施唯一约束可以被认为是不应直接访问的实现细节。但是,应该知道,不需要在唯一列上手动创建索引;这样做只会复制自动创建的索引。
有两种在PostgreSQL上创建UNIQUE INDEX
的方法。
如上所述,第一种方法是在先前创建的表上使用ALTER TABLE
:
ALTER TABLE books ADD UNIQUE ("symbol");
OR
ALTER TABLE books ADD CONSTRAINT UQ_SYMBOL UNIQUE ("symbol")
注意::这种方法使用PostgreSQL索引的自动生成(即PostgreSQL将识别该列是唯一的,并为其添加索引)。
第二种方法是using CREATE INDEX
:
CREATE UNIQUE INDEX "symbol" ON books("symbol");
最后但并非最不重要的一点是,您可以在表创建中简单地省略INDEX
关键字,并让PostgreSQL为您做魔术(创建索引):
CREATE TABLE "books" (
"id" BIGINT NOT NULL,
"creation_date" TIMESTAMP NOT NULL,
"symbol" VARCHAR NOT NULL,
PRIMARY KEY ("id"),
UNIQUE ("symbol")
);
注意:语法UNIQUE "symbol"("symbol")
可能与方法2混淆,因为在该方法一中,需要同时指定表名和列名({{1} })。
因此,这不是PostgreSQL的错误,而是HeidiSQL的错误。
编辑:我能够重现该错误和opened an issue on github。