PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zmienić REFERENCES w PostgreSQL?

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;

Szczegóły w instrukcji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Równoległe unnest() i porządek sortowania w PostgreSQL

  2. Zapytanie o szerokość geograficzną PostgreSQL

  3. Jak programowo znaleźć dziedziczone tabele w PostgreSQL?

  4. Zdalne połączenie z serwerem Postgresql

  5. Zduplikowana wartość klucza IntegrityError narusza ograniczenie unikalności — django/postgres