Удалить безымянное ограничение из PostgreSQL - PullRequest
1 голос
/ 06 марта 2019

В PostgreSQL у меня есть следующее определение таблицы

create table file(
    file_id int generated by default as identity primary key,
    file_name text UNIQUE not null
);

Мой вопрос: как мне удалить уникальное ограничение на file_name?

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

Стратегия именования по умолчанию, которую использует Postgres, - tablename_columnname_key для такого ограничения, поэтому в вашем случае это будет file_file_name_key

Так что вы можете использовать

alter table file drop constraint file_file_name_key;

Если вы не хотите полагаться на стратегию именования по умолчанию, вы можете использовать следующий запрос для получения имени:

select constraint_name
from information_schema.key_column_usage
where table_name = 'file'
  and table_schema = 'public'
  and column_name = 'file_name';
2 голосов
/ 06 марта 2019

Вам потребуется запросить метаданные (pg_constraint, pg_index, pg_attribute), чтобы узнать имя ограничения, которое реализуется уникальным индексом для вашего столбца.

PostgreSQLиспользует внутреннюю логику для автоматического генерирования имени (см. другой ответ), но полагаться на это хрупко: если с этим именем уже есть ограничение, PostgreSQL устранит неоднозначность, добавив число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...