PostgreSQL - automatyzacja tabeli


(northwest) #1

Witam,

Mam taką tabelkę:

CREATE TABLEserver_commands"(

"id" serial,

"idcudaka" int4 ,

"idpolecenia" int4 ,

"czas" timestamp ,

"status" char(10) ,

"command" varchar(50) ,

"odpowiedz" varchar(80) ,

"czas2" timestamp ,

PRIMARY KEY ("id")

)

Potrzebuję następującego zachowania kolumny idpolecenia w tabeli server_commands.

Przy każdym dodaniu rekordu do tabeli przydzielony jest mu kolejny numer idpolecenia, ale numeracja jest w ramach każdego cudaka osobno, np.

dodajemy rekord dla cudaka "A" - otrzymuje on numer 1 (id polecenia)

dodajemy rekord dla cudaka "A" - otrzymuje on numer 2 (id polecenia)

dodajemy rekord dla cudaka "B" - otrzymuje on numer 1 (id polecenia)

dodajemy rekord dla cudaka "A" - otrzymuje on numer 3 (id polecenia)

dodajemy rekord dla cudaka "B" - otrzymuje on numer 2 (id polecenia)

dodajemy rekord dla cudaka "C" - otrzymuje on numer 1 (id polecenia)

dodajemy rekord dla cudaka "B" - otrzymuje on numer 3 (id polecenia)

dodajemy rekord dla cudaka "B" - otrzymuje on numer 4 (id polecenia)

Numer jest inkrementowany od 0 do MAX_NUMBER. Po osiągnięciu MAX_NUMBER kolejnym przydzielonym numerem jest 0.

Przewiduję docelowo MAX_NUMBER jako 99999.

W bazie nie mogą się powtórzyć dwa rekordy, które będą miały jednakowy id_cudaka i idpolecenia. W szczególności przy próbie dodania takiego powtórzonego rekordu - można usuwać ten stary.

Wiecie może jak to zrobić??

Z góry dzięki za pomoc,

pozdrawiam Łukasz


(inż. Piniol) #2
select max(idpolecenia) + 1 as maxid from server_commands where id_cudaka = "A"

I albo maxid wrzucasz do zmiennej i podstawiasz w insercie, albo wstawiasz zapytanie bezpośrednio w insercie albo do triggera, to takie 3 najprostsze metody tak z rana :wink: