Zależności wewnętrzne między tabelami i / lub innymi obiektami nigdy nie są powiązane z nazwą obiektu. Wewnętrznie każdy obiekt jest przechowywany w tabeli katalogu, a OID (wewnętrzny klucz podstawowy) obiektu jest używany do wszystkiego jeszcze.
W związku z tym KLUCZ OBCY
odniesienie jest przechowywane w tabelach katalogu pg_constraint
(samo ograniczenie wraz z jego nazwą) oraz pg_depend
. Zmiana nazw tabel wcale nie wpłynie na funkcjonalność .
Nazwa wiązania pozostaje niezmienione. Możesz to zignorować lub zmienić nazwę ograniczenia, aby nie wprowadzało w błąd.
Jednak ponieważ nie określiłeś nazwy ograniczenia w czasie tworzenia, system wybrał domyślną wartość, którą jest example2_example1fk_fkey
w twoim przypadku, chyba że nazwisko zostało zajęte. Brak odniesienia do wskazanej tabeli Nazwa. Ale nazwa kolumny prawdopodobnie będzie musiał zmienić się również w twoim przykładzie. I to jest używany w nazwie ograniczenia.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
W Postgresie 9.2 lub nowszym możesz po prostu zmienić nazwę ograniczenia (jako dequis skomentowane ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
W starszych wersjach musisz usunąć i odtworzyć ograniczenie, aby zmienić jego nazwę, najlepiej w jednej instrukcji:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;