sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur ändrar man REFERENSER i PostgreSQL?

Interna beroenden mellan tabeller och/eller andra objekt är aldrig bundna till objektnamnet. Internt lagras varje objekt i en katalogtabell och OID (intern primärnyckel) för objektet används för allt annat.

Följaktligen en FREIGN KEY referensen lagras i katalogtabellerna pg_constraint (selva begränsningen inkl. dess namn) och pg_depend . Att ändra tabellnamn försämrar inte funktionaliteten alls .

namnet av begränsningen förblir oförändrad. Du kan ignorera det, eller så kanske du vill byta namn på begränsningen så att den inte är vilseledande.

Men eftersom du inte angav ett begränsningsnamn vid skapandet valde systemet en standard, som är example2_example1fk_fkey i ditt fall om inte namnet togs. Ingen referens till den refererade tabellen namn. Men kolumnnamnet kommer förmodligen att behöva ändras i ditt exempel också. Och det används i begränsningsnamnet.

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

I Postgres 9.2 eller senare kan du också byta namn på begränsningen (som dequis kommenterade ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

I äldre versioner måste du släppa och återskapa begränsningen för att byta namn på den, bäst i ett enda uttalande:

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

Detaljer i manualen.




  1. ASP.NET Web Forms och MySql Entity Framework:Kapslade transaktioner stöds inte

  2. Oracle:Hur kan jag implementera en naturlig order-by i en SQL-fråga?

  3. Tillägg av SUMMA för två oberoende tabeller

  4. MySQL - Problem med att skapa användardefinierad funktion (UDF)