PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Tworzenie sekwencji na istniejącym stole

Ustaw wartość domyślną podczas dodawania nowej kolumny:

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

Zmiana wartości domyślnej dla istniejących kolumn nie zmienia istniejących danych, ponieważ baza danych nie ma możliwości sprawdzenia, które wartości powinny zostać zmienione; nie ma flagi „ta kolumna ma wartość domyślną” na wartościach kolumn, jest tylko wartość domyślna (pierwotnie NULL, ponieważ nie określiłeś niczego innego) i bieżąca wartość (również NULL), ale sposób na odróżnienie „NULL ponieważ jest to wartość domyślna" i "NULL, ponieważ została jawnie ustawiona na NULL". Tak więc, jeśli zrobisz to w dwóch krokach:

  1. Dodaj kolumnę.
  2. Zmień wartość domyślną.

PostgreSQL nie zastosuje wartości domyślnej do właśnie dodanej kolumny. Jeśli jednak dodasz kolumnę i jednocześnie podasz wartość domyślną, PostgreSQL będzie wiedział, które wiersze mają wartość domyślną (wszystkie), więc może dostarczyć wartości w miarę dodawania kolumny.

Nawiasem mówiąc, prawdopodobnie chcesz mieć wartość NOT NULL w tej kolumnie:

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

I, jak a_horse_with_no_name uwagi, jeśli zamierzasz używać tylko rid_seq dla twojego test.rid kolumnę, możesz ustawić jej kolumnę właściciela do test.rid tak, że sekwencja zostanie usunięta, jeśli kolumna zostanie usunięta:

alter sequence rid_seq owned by test.rid;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WYBIERZ ISTNIEJE vs. LIMIT 1

  2. Najszybszy sposób na wykonanie zapytania usuwającego w dużej tabeli w PostgreSQL

  3. Jak skonfigurować replikację klastrów do klastrów dla PostgreSQL

  4. Jak uzyskać średnią wartości „środkowych” w grupie?

  5. Czy mogę rejestrować czas wykonania zapytania w PostgreSQL 8.4?