繁体   English   中英

PostgreSQL 错误:关系已存在 - CREATE TABLE 中的 FOREIGN KEY

[英]PostgreSQL Error: Relation already exists - FOREIGN KEY in CREATE TABLE

我正在制作一张表格,如下所示:

CREATE TABLE creator.lists
(
    _id bigserial PRIMARY KEY NOT NULL,
    account_id bigint NOT NULL,
    created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    display_name text DEFAULT '',
    name text DEFAULT '',
    extra jsonb,

    FOREIGN KEY (account_id)
        REFERENCES creator.accounts (_id)
            ON DELETE CASCADE
);

但我收到此错误:

ERROR:  relation "account_id_index" already exists

当我运行时:

CREATE INDEX
    account_id_index
ON
    creator.lists
(
    account_id
);

如何在外键上创建索引? 我正在运行 v11.1

请注意,我之前也为另一个表运行过类似的命令:

CREATE INDEX
    account_id_index
ON
    creator.contacts
    (
        account_id
    );

我不认为索引名称需要在表之间是唯一的?

索引与表、视图和序列位于相同的命名空间中,因此您不能在一个模式中对这些对象中的任何一个使用相同的名称两次。

要么选择一个不同的名字,要么让 PostgreSQL 为你选择一个:

CREATE INDEX ON creator.lists (account_id);

好的,似乎索引名称需要是唯一的,因为删除命名修复了它:

CREATE INDEX
ON
    creator.contacts
    (
        account_id
    );

文档中:

name要创建的索引的名称。 此处不能包含模式名称; 索引始终在与其父表相同的架构中创建。 如果名称被省略,PostgreSQL 会根据父表的名称和索引列名称选择一个合适的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM