Вътрешните зависимости между таблици и/или други обекти никога не са обвързани с името на обекта. Вътрешно всеки обект се съхранява в каталожна таблица и OID (вътрешен първичен ключ) на обекта се използва за всичко друго.
Съответно, ВЪНШЕН КЛЮЧ
справката се съхранява в каталожните таблици pg_constraint
(самото ограничение, включително името му) и pg_dependкод>
. Промяната на имената на таблиците въобще няма да наруши функционалността .
Име на ограничението остава непроменено. Можете да пренебрегнете това или може да искате да преименувате ограничението, така че да не е подвеждащо.
Въпреки това, тъй като не сте посочили име на ограничение по време на създаване, системата е избрала по подразбиране, което е example2_example1fk_fkey
във вашия случай, освен ако името не е взето. Няма препратка към посочената таблица име. Но името на колоната вероятно ще трябва да се промени и във вашия пример. И това се използва в името на ограничението.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
В Postgres 9.2 или по-нова версия можете просто да преименувате ограничението (като dequis коментира ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
В по-стари версии трябва да премахнете и да създадете отново ограничението, за да го преименувате, най-добре в един израз:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;