【问题标题】:Postgres syntax error on UNIQUE INDEX - HeidiSQL唯一索引上的 Postgres 语法错误 - HeidiSQL
【发布时间】:2018-07-28 21:26:39
【问题描述】:

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 heidisql


    【解决方案1】:

    有一个recommendation note 说明您应该如何在 PostgreSQL 中创建一个 UNIQUE INDEX

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

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

    1. 第一种方法,如上所述,在之前创建的表上使用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. 最后但同样重要的是,您可以在创建表时简单地省略 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 中需要同时指定表和列名 (books("symbol"))。

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

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

    【讨论】:

    • 他们发现了那个错误吗?
    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2014-06-25
    相关资源
    最近更新 更多