UNIQUE INDEX 上的 Postgres 语法错误 - HeidiSQL

Postgres syntax error on UNIQUE INDEX - 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'';

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

这是 PostgreSQL 的 HeidiSQL 错误吗?

关于如何在 PostgreSQL 中创建 UNIQUE INDEX 有一个 recommendation note

The preferred way to add a unique constraint to a table is ALTER TABLE ... ADD CONSTRAINT. The use of indexes to enforce unique constraints could be considered an implementation detail that should not be accessed directly. One should, however, be aware that there's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index.

有几种方法可以在 PostgreSQL 上创建 UNIQUE INDEX

  1. 第一种方式,如上所述,在之前创建的table:

    上使用ALTER TABLE

    ALTER TABLE books ADD UNIQUE ("symbol");

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

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

  2. 第二种方式是using CREATE INDEX:

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

  3. 最后但同样重要的是,您可以在 table 创建时简单地省略 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 混淆,因为在方法一中需要同时指定 table和列名 (books("symbol")).

因此,这不是 PostgreSQL 错误,而是 HeidiSQL 错误。

编辑: 我能够重现错误并且 opened an issue on github