postgresql Postgres只允许一个同名索引吗?

ekqde3dh  于 2023-02-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(637)

在MySQL中,我可以在不同的表中拥有相同的索引(相同的名称和列),从我目前看到的情况来看,Postgres只允许我拥有一个具有名称的索引,即使我试图在不同的表中创建它。
Postgres真的不允许同名索引吗?还是我做错了什么?

gwbalxhn

gwbalxhn1#

您是对的,索引、表、视图和序列共享相同的名称空间,因此,如果这些对象中的任何两个在相同的模式(=名称空间)中,它们就不能具有相同的名称。
您可以从目录表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强制名称和模式的组合是唯一的。

相关问题