1

Temat: typ SERIAL a nextval

Witam...
Gdyby ktoś miał niepewność co do typu SERIAL dla podobnej sytuacji...

CREATE TABLE a
(id_a         SERIAL,                   .....);

Czy wprowadzenie danych do tabeli z kolumną serial (np. zaciągnięcie danych z innej tabeli) nie pozmienia tych wprowadzanych przez zastąpienie ich np. z 444, 567, 222, 123 na 1,2,3,4 ?

Sprawdzono, że nie pozmienia smile

Ale tu jest mały haczyk, bo jak dane w kolumnie o typie SERIAL (są primary key) nie mogą się powtarzać, to jak po zaciągnięciu danych będę dodawać kolejny rekord już bez podania wartości dla kolumny SERIAL (żeby się samoczynnie nadał kolejny numer), to wstawi mi 1 a to może być powtórzenie! czyli nie do przyjęcia!    (zaczynam mieć wątpliwość czy mi się osobiście coś nie pomyliło, to mnie naprostujcie wink)

SQLException: ERROR: duplicate key violates unique constraint "..."

W każdym razie jak zrobię
ALTER TABLE b
ADD COLUMN id_b SERIAL;

a potem wyświtlam sobie na konsoli jak to wygląda robiąc: \d b
to wypisuje mi
id_b          integer       not null default nextval ('b_id_b_seq' ::regclass)

zatem ustawiam tę sekwencję 'b_id_b_seq'  od numeru ostatniego w tabeli np. 100

ALTER SEQUENCE b_id_b_seq START 101;

i to sprawi, że samoczynnie dopisujące się numery w tej kolumnie będą od 101 ale nie będą się powtarzać z tymi zaciągniętymi.
Czy mozna to zrobić lepiej?

Jak możecie dodać coś w temacie, to zapraszam smile

2

Odp: typ SERIAL a nextval

Moim zdaniem najlepiej przy wprowadzaniu danych nie podawać kolumny która jest serialem.
Jeśli wprowadzamy ze skryptu czy dumpa, łatwo można przerobić źródło aby usunąć podane liczby.