database - 为什么两个表不能有同名索引?

标签 database postgresql

我在同一数据库 (PostgreSQL) 中的两个单独的表上创建索引,但我收到一条错误消息,指出索引已存在。这是事实,但是索引存在于不同的表上。改了名字之后就生效了。

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

我找到了两个来源来回答这个问题,尽管答案不同。一个用于 MySQL,另一个用于 Postgres:

In postgres how do I add index to existing table?

Same index name for two tables

最佳答案

您可以有两个同名的索引。他们只是不能在同一个模式中。就像您可以拥有两个同名但不在同一架构中的表一样。

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

这反射(reflect)了 PostgreSQL 设计者的决定。 SQL 标准不涉及创建索引。

关于database - 为什么两个表不能有同名索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997441/

相关文章:

sql - 简单表设计的最佳 sql 查询

mysql - sql通过列号/索引/位置而不是列名选择列

sql - 如何在 PostgreSQL 中将平均值四舍五入到小数点后两位?

postgresql - Postgres : problem with FK contraint

postgresql - 使用 SSL 将 Pentaho Kettle/Spoon 连接到 Heroku PostgreSQL 时出现问题

sql - 使用一张表和分开多表各有优缺点吗?

mysql - 无法提供代码来回答此查询。

database - 2 节点 Redis HA

linux - sqlite3 - 访问挂载的数据库文件,数据库被锁定

postgresql - 在 Postgresql 中创建运算符