2009-06-09 8 views
45

È possibile modificare il nome del vincolo in Postgres? Ho un PK aggiunto con:Aggiornamento del nome del vincolo in PostgreSQL

ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id); 

E voglio avere altro nome per esso, per essere coerente con il resto del sistema. Devo eliminare il vincolo PK esistente e crearne uno nuovo? O c'è un modo "soft" per gestire lo ?

Grazie!

risposta

58

Per la chiave primaria, si dovrebbe essere in grado di solo:

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name 

che non funziona per altri tipi di vincoli però. L'opzione migliore è quella di eliminare quella vecchia e crearne una nuova. Assicurati di farlo all'interno di una transazione, in modo che il sistema non sia attivo senza di esso durante la ricostruzione. (E se non lo si può fare in una transazione, assicurarsi di creare il nuovo prima, prima di cadere quello vecchio)

+0

Grazie - la query funziona perfettamente! –

77

Per rinominare un vincolo esistente in PostgreSQL 9.2 o più recente, è possibile utilizzare ALTER TABLE:

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name; 
+0

con quale versione di psql? Penso che non funzioni con 9.1 – Regisz

+5

@Regisz PostgreSQL> = 9.2 –

+0

@ArturoHerrero possiamo rinominare su più vincoli contemporaneamente, se sì, come? – Erlan

Problemi correlati