sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan ændrer man REFERENCER i PostgreSQL?

Interne afhængigheder mellem tabeller og/eller andre objekter er aldrig bundet til objektnavnet. Internt gemmes hvert objekt i en katalogtabel, og objektets OID (intern primærnøgle) bruges til alt andet.

Derfor er en FREIGN KEY reference er gemt i katalogtabellerne pg_constraint (selve begrænsningen inkl. dens navn) og pg_depend . Ændring af tabelnavne forringer overhovedet ikke funktionaliteten .

navnet af begrænsningen forbliver uændret. Du kan ignorere det, eller du vil måske omdøbe begrænsningen, så den ikke er vildledende.

Men da du ikke specificerede et begrænsningsnavn på oprettelsestidspunktet, valgte systemet en standard, som er example2_example1fk_fkey i dit tilfælde, medmindre navnet blev taget. Ingen reference til den refererede tabel navn. Men kolonnenavnet vil sandsynligvis også skulle ændres i dit eksempel. Og det bruges i begrænsningsnavnet.

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

I Postgres 9.2 eller nyere kan du også bare omdøbe begrænsningen (som dequis kommenteret ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

I ældre versioner skal du slippe og genskabe begrænsningen for at omdøbe den, bedst i en enkelt sætning:

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. Fjernelse af sporfiler med ADRCI

  2. Tjek om brugernavnet allerede eksisterer ved hjælp af PHP

  3. Golang MySQL fejl - packets.go:33:uventet EOF

  4. SSIS version checkout