在MySQL中,可以在不同的表中具有相同的索引(相同的名称和列)。从我目前所看到的情况来看,Postgres只允许我有一个具有名称的索引,即使我试图在另一个表中创建它。
Postgres真的不允许同名索引,还是我做错了什么?
发布于 2021-05-17 16:39:56
您是正确的,索引、表、视图和序列共享相同的名称空间,因此,如果这些对象位于相同的架构(=名称空间),则它们中的任何两个都不能具有相同的名称。
您可以从目录表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强制名称和模式的组合是唯一的。
https://stackoverflow.com/questions/67573434
复制相似问题