唯一索引上的Postgres语法错误-HeidiSQL

时间:2018-07-28 21:26:39

标签: postgresql heidisql

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'';

当我尝试提交时,出现以下错误:

IMG

这是PostgreSQL的HeidiSQL错误吗?

1 个答案:

答案 0 :(得分:3)

关于如何在PostgreSQL中创建UNIQUE INDEX的问题,有recommendation note

  

向表添加唯一约束的首选方法是ALTER TABLE ... ADD CONSTRAINT。使用索引强制实施唯一约束可以被认为是不应直接访问的实现细节。但是,应该知道,不需要在唯一列上手动创建索引;这样做只会复制自动创建的索引。

有两种在PostgreSQL上创建UNIQUE INDEX的方法。

  1. 如上所述,第一种方法是在先前创建的表上使用ALTER TABLE

    ALTER TABLE books ADD UNIQUE ("symbol");

    OR

    ALTER TABLE books ADD CONSTRAINT UQ_SYMBOL UNIQUE ("symbol")

    注意::这种方法使用PostgreSQL索引的自动生成(即PostgreSQL将识别该列是唯一的,并为其添加索引)。

  2. 第二种方法是using CREATE INDEX

    CREATE UNIQUE INDEX "symbol" ON books("symbol");

  3. 最后但并非最不重要的一点是,您可以在表创建中简单地省略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