Come posso modificare una tabella PostgreSQL e rendere unica una colonna?


166

Ho una tabella in PostgreSQL in cui lo schema è simile al seguente:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

Ora voglio rendere unico il permalink attraverso il tavolo ALTER-ing la tabella. Qualcuno può aiutarmi con questo?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name

Risposte:


270

L'ho capito dai documenti PostgreSQL, la sintassi esatta è:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Grazie Fred .


231

Oppure, fare in modo che il DB assegni automaticamente un nome di vincolo utilizzando:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
Se lo fai, Postgres creerà il vincolo ma il nome assegnerà "automaticamente" è la parola "aggiungi". L'ho appena provato
Santi il

1
Quando uso la sintassi sopra, Postgress crea la nuova contrapposizione con il nome di mytable_mycolumn_key cui sono abbastanza contento :-)
Adam,

41

è anche possibile creare un vincolo univoco di più di 1 colonna:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

Questo non sembra funzionare per qualcosa del genere: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);oppureALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.