Ошибка PostgreSQL: связь уже существует - FOREIGN KEY в CREATE TABLE - PullRequest
0 голосов
/ 05 февраля 2019

Я делаю таблицу следующим образом:

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

Не думаю, чточто имена индексов должны быть уникальными между таблицами?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Индексы располагаются в том же пространстве имен, что и таблицы, представления и последовательности, поэтому нельзя использовать одно и то же имя дважды для любого из этих объектов в одной схеме.

Либо выберите другое имя, либо PostgreSQL выберет однодля вас:

CREATE INDEX ON creator.lists (account_id);
0 голосов
/ 05 февраля 2019

Хорошо, похоже, имена индексов должны быть уникальными, так как удаление имен было исправлено:

CREATE INDEX
ON
    creator.contacts
    (
        account_id
    );

Из документов :

name
The name of the index to be created. No schema name can be included here; the index is always created in the same schema as its parent table. If the name is omitted, PostgreSQL chooses a suitable name based on the parent table's name and the indexed column name(s).
...