sql >> Database >  >> RDS >> PostgreSQL

Hoe REFERENTIES in PostgreSQL te wijzigen?

Interne afhankelijkheden tussen tabellen en/of andere objecten zijn nooit gebonden aan de objectnaam. Intern wordt elk object opgeslagen in een catalogustabel en wordt de OID (interne primaire sleutel) van het object gebruikt voor alles anders.

Dienovereenkomstig, een FOREIGN KEY referentie wordt opgeslagen in de catalogustabellen pg_constraint (de beperking zelf incl. de naam) en pg_depend . Het wijzigen van tabelnamen heeft geen enkele invloed op de functionaliteit .

De naam van de beperking blijft ongewijzigd. Je kunt dat negeren, of je wilt de beperking misschien een andere naam geven, zodat het niet misleidend is.

Omdat u bij het maken echter geen beperkingsnaam hebt opgegeven, heeft het systeem een ​​standaard gekozen, namelijk example2_example1fk_fkey in uw geval, tenzij de naam is gebruikt. Geen verwijzing naar de tabel waarnaar wordt verwezen naam. Maar de kolomnaam zal waarschijnlijk ook in uw voorbeeld moeten veranderen. En dat wordt gebruikt in de naam van de beperking.

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

In Postgres 9.2 of hoger kun je de beperking ook gewoon hernoemen (als dequis commentaar ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

In oudere versies moet u de beperking verwijderen en opnieuw maken om de naam ervan te wijzigen, het beste in een enkele instructie:

ALTER TABLE example2  -- rename constraint
   DROP CONSTRAINT example2_example1fk_fkey
 , ADD  CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
      REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Details in de handleiding.




  1. DATETIME VS INT voor het opslaan van tijd?

  2. Wat is de reikwijdte van CONTEXT_INFO in SQL Server?

  3. MySQL krijgt hoeveelheden van de afgelopen 12 maanden gegroepeerd per maand

  4. Type komt niet overeen:kan niet converteren van int naar ResultSet