Использую следующий код для создания таблицы:
create table new_tab (id int);
insert into new_tab (id) values (1), (2), (3);
alter table new_tab add constraint my_primary primary key (id);
Предполагаю, что имя ограничения первичного ключа будет
my_primary
, поэтому если я захочу удалить этот первичный ключ, по идее мне нужно прописать это имя ограничения:
alter table new_tab drop constraint my_primary;
В результате данного запроса получаю следующую ошибку:
ERROR: 3940: Constraint 'my_primary' does not exist.
ограничение с данным именем не существует.
1) В чем ошибка запроса на удаление первичного ключа?
2) Как можно найти имя первичного ключа, если допустим его не прописал в ручную при создании как Я?
3) Почему запрос
select * from information_schema.table_constraints where table_name = 'new_tab';
возвращает
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
| def | test | PRIMARY | test | new_tab | PRIMARY KEY | YES |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
из которого следует, что
constraint_name = "PRIMARY"
(где-то в глубине души я понимаю, что это просто название самого ограничения, а не имя этого ограничения)?