Разрешает ли Postgres только один индекс с тем же именем?

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

Действительно ли Postgres не разрешает индексы с одинаковыми именами или я что-то не так делаю?


person Fabio    schedule 17.05.2021    source источник


Ответы (1)


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

Это видно из определения таблицы каталога pg_class, которая содержит все эти объекты:

\d pg_class

                     Table "pg_catalog.pg_class"
       Column        │     Type     │ Collation │ Nullable │ Default 
═════════════════════╪══════════════╪═══════════╪══════════╪═════════
 oid                 │ oid          │           │ not null │ 
 relname             │ name         │           │ not null │
[...]
Indexes:
    "pg_class_oid_index" UNIQUE, btree (oid)
    "pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace)
    "pg_class_tblspc_relfilenode_index" btree (reltablespace, relfilenode)

Второй индекс pg_class_relname_nsp_index делает комбинацию имени и схемы уникальной.

person Laurenz Albe    schedule 17.05.2021