【问题标题】:Does Postgres only allow one index with the same name?Postgres 是否只允许一个同名索引?
【发布时间】:2021-05-18 00:45:28
【问题描述】:

在 MySQL 中,我可以在不同的表中拥有相同的索引(相同的名称和列)。 从我目前看到的情况来看,Postgres 只允许我拥有一个带有名称的索引,即使我尝试在不同的表中创建它。

Postgres 真的不允许使用相同名称的索引还是我做错了什么?

【问题讨论】:

    标签: postgresql indexing


    【解决方案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 强制名称和架构的组合是唯一的。

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 2017-09-14
      • 2011-07-13
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多