Ändern Sie die Tabelleneinschränkung in PostgreSQL

9

Angenommen, ich habe eine Einschränkung

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

das muss geändert werden, damit die Postleitzahllänge ist 6.

Muss ich die Einschränkung zipchkzuerst löschen und dann neu erstellen?

ALTER TABLE distributors DROP CONSTRAINT zipchk;
ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);

oder gibt es einen MODIFY(ähnlichen) Befehl:

ALTER TABLE distributors MODIFY CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);
user4150760
quelle
2
Es gibt keine modifyEinschränkung (die im Handbuch klar dokumentiert ist ). Sie müssen es löschen und neu erstellen.
a_horse_with_no_name
1
Aber ich denke, es kann in einer einzigen Aussage gemacht werden.
ypercubeᵀᴹ
Es gibt eine Option ALTER CONSTRAINTin 9.4, die jedoch nur für Fremdschlüsseleinschränkungen funktioniert. postgresql.org/docs/current/static/sql-altertable.html
user4150760

Antworten:

21

Um die Kommentare zusammenzufassen:

Wie @ypercube angedeutet hat , können Sie dies in einem einzigen Befehl tun , was billiger und sicherer ist:

ALTER TABLE distributors
  DROP CONSTRAINT zipchk
, ADD  CONSTRAINT zipchk CHECK (length(zipcode) = 6);

ALTER CONSTRAINTIn Postgres 9.4 oder höher (wie Sie festgestellt haben) kann nur die "Aufschiebbarkeit" einer FK-Einschränkung geändert werden. Also nicht das, wonach Sie suchen. Abgesehen davon gibt es keinen " MODIFY(like) -Befehl" für Einschränkungen (unter Bezugnahme auf MySQLs, MODIFYnehme ich an).

Details im Handbuch fürALTER TABLE , wie @a_horse erwähnt.

Erwin Brandstetter
quelle