为什么两个表不能具有相同名称的索引?

zeb*_*ree 5 database postgresql

我在同一个数据库(PostgreSQL)中的两个单独的表上创建索引,但出现一个错误,指出一个索引已经存在。的确如此,但是索引存在于另一个表中。更改名称后,它起作用了。

我想知道为什么会这样吗?为什么设计数据库时要使两个表不能具有相同的索引名称?

我找到了两个答案,尽管答案不同。一个用于MySQL,另一个用于Postgres:

在postgres中,如何将索引添加到现有表中?

两个表的索引名称相同

Mik*_*ll' 5

您可以有两个同名索引。它们只是不能处于同一架构中。就像您可以拥有两个相同名称的表,但不能使用相同的模式一样。

sandbox=# create schema test;
CREATE SCHEMA
sandbox=# create table public.a (a_id integer not null);
CREATE TABLE
sandbox=# create table test.a (a_id integer not null);
CREATE TABLE
sandbox=# create index a_idx on public.a (a_id);
CREATE INDEX
sandbox=# create index a_idx on test.a (a_id);
CREATE INDEX
Run Code Online (Sandbox Code Playgroud)

这反映了PostgreSQL设计者的决定。SQL标准不处理创建索引。