statement ok
CREATE TABLE users (
  id    INT PRIMARY KEY,
  name  VARCHAR NOT NULL,
  title VARCHAR,
  INDEX foo (name),
  UNIQUE INDEX bar (id, name)
)

statement ok
CREATE TABLE users_dupe (
  id    INT PRIMARY KEY,
  name  VARCHAR NOT NULL,
  title VARCHAR,
  INDEX foo (name),
  UNIQUE INDEX bar (id, name)
)

statement ok
INSERT INTO users VALUES (1, 'tom', 'cat'),(2, 'jerry', 'rat')

statement ok
INSERT INTO users_dupe VALUES (1, 'tom', 'cat'),(2, 'jerry', 'rat')

query TTBITTTBBBF colnames,rowsort
SHOW INDEXES FROM users
----
table_name  index_name  non_unique  seq_in_index  column_name  definition  direction  storing  implicit  visible  visibility
users       bar         false       1             id           id          ASC        false    false     true     1
users       bar         false       2             name         name        ASC        false    false     true     1
users       foo         true        1             name         name        ASC        false    false     true     1
users       foo         true        2             id           id          ASC        false    true      true     1
users       users_pkey  false       1             id           id          ASC        false    false     true     1
users       users_pkey  false       2             name         name        N/A        true     false     true     1
users       users_pkey  false       3             title        title       N/A        true     false     true     1

query TTBITTTBBBF colnames,rowsort
SHOW INDEXES FROM users_dupe
----
table_name  index_name       non_unique  seq_in_index  column_name  definition  direction  storing  implicit  visible  visibility
users_dupe  bar              false       1             id           id          ASC        false    false     true     1
users_dupe  bar              false       2             name         name        ASC        false    false     true     1
users_dupe  foo              true        1             name         name        ASC        false    false     true     1
users_dupe  foo              true        2             id           id          ASC        false    true      true     1
users_dupe  users_dupe_pkey  false       1             id           id          ASC        false    false     true     1
users_dupe  users_dupe_pkey  false       2             name         name        N/A        true     false     true     1
users_dupe  users_dupe_pkey  false       3             title        title       N/A        true     false     true     1

statement error pgcode 42P07 index name "bar" already exists
ALTER INDEX users@foo RENAME TO bar

statement error pgcode 42601 empty index name
ALTER INDEX users@foo RENAME TO ""

statement error pgcode 42704 index "ffo" does not exist
ALTER INDEX users@ffo RENAME TO ufo

statement error index "ffo" does not exist
ALTER INDEX ffo RENAME TO ufo

statement error index name "foo" is ambiguous
ALTER INDEX foo RENAME TO ufo

statement error index name "foo" is ambiguous
ALTER INDEX IF EXISTS foo RENAME TO ufo

statement ok
ALTER INDEX IF EXISTS users@ffo RENAME TO ufo

# Regression test for #42399.
statement ok
ALTER INDEX IF EXISTS ffo RENAME TO ufo

statement ok
ALTER INDEX users@foo RENAME TO ufooo

statement ok
ALTER INDEX IF EXISTS ufooo RENAME TO ufoo

statement ok
ALTER INDEX ufoo RENAME TO ufo

query TTBITTTBBBF colnames,rowsort
SHOW INDEXES FROM users
----
table_name  index_name  non_unique  seq_in_index  column_name  definition  direction  storing  implicit  visible  visibility
users       bar         false       1             id           id          ASC        false    false     true     1
users       bar         false       2             name         name        ASC        false    false     true     1
users       ufo         true        1             name         name        ASC        false    false     true     1
users       ufo         true        2             id           id          ASC        false    true      true     1
users       users_pkey  false       1             id           id          ASC        false    false     true     1
users       users_pkey  false       2             name         name        N/A        true     false     true     1
users       users_pkey  false       3             title        title       N/A        true     false     true     1

user testuser

statement error user testuser does not have CREATE privilege on relation users
ALTER INDEX users@bar RENAME TO rar

user root

statement ok
GRANT CREATE ON TABLE users TO testuser

user testuser

statement ok
ALTER INDEX users@bar RENAME TO rar

query TTBITTTBBBF colnames,rowsort
SHOW INDEXES FROM users
----
table_name  index_name  non_unique  seq_in_index  column_name  definition  direction  storing  implicit  visible  visibility
users       rar         false       1             id           id          ASC        false    false     true     1
users       rar         false       2             name         name        ASC        false    false     true     1
users       ufo         true        1             name         name        ASC        false    false     true     1
users       ufo         true        2             id           id          ASC        false    true      true     1
users       users_pkey  false       1             id           id          ASC        false    false     true     1
users       users_pkey  false       2             name         name        N/A        true     false     true     1
users       users_pkey  false       3             title        title       N/A        true     false     true     1

user root

query ITT rowsort
SELECT * FROM users
----
1 tom   cat
2 jerry rat

statement ok
CREATE VIEW v AS SELECT name FROM users@{FORCE_INDEX=ufo}

statement error cannot rename index "ufo" because view "v" depends on it
ALTER INDEX users@ufo RENAME TO foo

statement ok
ALTER INDEX users@rar RENAME TO bar

# Regression test for #24774
statement ok
ALTER INDEX users@users_pkey RENAME TO pk

query ITT rowsort
SELECT * FROM users@pk
----
1 tom   cat
2 jerry rat

statement ok
SET vectorize=on

query T
EXPLAIN ALTER INDEX users@bar RENAME TO woo
----
distribution: local
vectorized: true
·
• alter index

statement ok
RESET vectorize

# Verify that EXPLAIN did not actually rename the index (#30543)
query T rowsort
SELECT DISTINCT index_name FROM [SHOW INDEXES FROM users]
----
pk
ufo
bar

# Regression test for #81211
statement ok
CREATE TABLE t1(a int);

statement ok
BEGIN;

statement ok
CREATE INDEX i1 ON t1(a);

statement ok
ALTER INDEX i1 RENAME TO i2;

statement ok
COMMIT;
