PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen einer Sequenz für eine vorhandene Tabelle

Legen Sie den Standardwert fest, wenn Sie die neue Spalte hinzufügen:

create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');

Durch das Ändern des Standardwerts für vorhandene Spalten werden vorhandene Daten nicht geändert, da die Datenbank nicht wissen kann, welche Werte geändert werden sollten. Es gibt kein Flag "Diese Spalte hat den Standardwert" für Spaltenwerte, es gibt nur den Standardwert (ursprünglich NULL, da Sie nichts anderes angegeben haben) und den aktuellen Wert (ebenfalls NULL), aber eine Möglichkeit, den Unterschied zwischen "NULL weil es der Standardwert ist" und "NULL, weil es explizit auf NULL gesetzt wurde". Wenn Sie es also in zwei Schritten tun:

  1. Spalte hinzufügen.
  2. Standardwert ändern.

PostgreSQL wendet den Standardwert nicht auf die gerade hinzugefügte Spalte an. Wenn Sie jedoch die Spalte hinzufügen und gleichzeitig den Standardwert angeben, weiß PostgreSQL, welche Zeilen den Standardwert haben (alle), sodass es Werte liefern kann, wenn die Spalte hinzugefügt wird.

Übrigens möchten Sie wahrscheinlich auch NOT NULL in dieser Spalte:

create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');

Und als a_horse_with_no_name Hinweise, wenn Sie nur rid_seq verwenden möchten für Ihre test.rid -Spalte, dann möchten Sie vielleicht ihre Besitzerspalte setzen zu test.rid damit die Sequenz gelöscht wird, wenn die Spalte entfernt wird:

alter sequence rid_seq owned by test.rid;