Как получить имя ограничения в существующей базе данных

При миграции я хочу удалить индекс из таблицы (перед добавлением нового). Я могу сделать это с помощью RunSQL следующим образом:

ALTER TABLE model DROP CONSTRAINT model_pkey

Но оказывается, что название ограничения (для первичного ключа) не всегда одинаково, потому что раньше оно называлось по-другому.

Поэтому я ищу способ получить имя ограничения, даже если оно не является именем по умолчанию.

Вот что у меня получилось :

DO $$
BEGIN
EXECUTE 'ALTER TABLE model DROP CONSTRAINT ' || (
    SELECT indexname 
    FROM pg_indexes 
    WHERE tablename = 'model' AND indexname LIKE '%pkey'
);
END $$;
Вернуться на верх