Postgresql brak synchronizacji id?

Postgresql brak synchronizacji id?
B9
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 10 godzin
  • Postów:65
0

Hej, pewnie szybkie pytanko dla osoby która ma doświadczenie.

Stworzyłem sobie tabelę w ten sposób.

Kopiuj
CREATE TABLE IF NOT EXISTS customer (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY,
    firstname VARCHAR(100) NOT NULL,
    lastname VARCHAR(800) NOT NULL,
    created TIMESTAMP,
    updated TIMESTAMP,
    PRIMARY KEY (id)
);

Default as identity, ze względu na umieszczanie danych testowych z id. Problem w tym że jeżeli chce dodać teraz dodatkowego inserta na tabeli, gdzie już nie podaję id to dostaję taką informację.
ERROR: duplicate key value violates unique constraint "customer_pkey"
DETAIL: Key (id)=(1) already exists.

Z każdym wywołaniem inserta (id)=(1) zwiększa się do =(2), =(3) i aż do momentu kiedy będzie max(id) z danej tabeli mogę insertować. Czy da się to w jakiś sposób naprawić? Dodam że dodając dane testowe bez id, tylko pozwalając generować się automatycznie, problem (raczej) nie występuje.

Szukałem w internecie, ale wszystko oparte jest o generowanie na sekwencji, gdzie ustawia się nextval.

TI
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:66
0
B9
Z tego co czytałem z seriali powinno się wycofywać, raczej też nie bez przyczyny dodali identity w najnowszych wersjach postgresa :d
TI
@brus97: Dzięki, faktycznie dla baz na Postgres 10+ to jest rekomendowane. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_serial
abrakadaber
abrakadaber
  • Rejestracja:prawie 13 lat
  • Ostatnio:9 miesięcy
  • Postów:6610
3

no ale przecież licznik leci od 1 i dopóki nic z niego nie weźmiesz to on cały czas ma wartość 1 więc czemu się dziwisz, że jak wstawiasz nowy rekord to dostajesz ID = 1??? Jak chcesz żeby leciał od innej wartości to ją trzeba ustawić, coś w ten deseń

Kopiuj
ALTER TABLE customer ALTER COLUMN id RESTART WITH 1000

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
B9
Ależ nie dziwię się, najzwyczajniej w świecie wiedziałem, że trzeba to zrobić, ale nie mogłem znaleźć komendy dla identity, bo wszystko wyszukiwało dla serial.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.