1

Temat: [PostgreSQL] Obniżanie sekwencji

Witam wszystkich, przyszło mi zmierzyć się z następującym problemem, któremu nie mogę sprostać bardzo proszę o pomoc. Sprawa wygląda tak:

- utworzyłem tabele z polem ID oraz NAZWA
- przypisałem do niej sekwencje
- gdy próbuje dodać do niej rekord sekwencja jak najbardziej działa
- utworzyłem trigger, który sprawdza czy istnieje już w tabeli wartość pola NAZWA
- jeśli NAZWA nie istnieje wstawia kolejny rekord i jest ok
- jeśli rekord nie istnieje nie wstawia do tabeli nic lecz sekwencja się zwiększa (czego nie widać), dopiero po kolejnym wstawieniu do tabeli widać przeskok między ostatnim ID a tym nowym


próbowałem w funkcji triggera dopisać SETVAL('nazwa_seqwencji',moja wartość), ale nie chce to działać, proszę o pomoc...

2

Odp: [PostgreSQL] Obniżanie sekwencji

Bardzo trudno jest zachować ciągłą numeracje jakiegoś pola w środowisku, do którego ma jednoczesny dostęp wielu użytkowników. Co miała by zrobić baza danych gdy zarejestruje w tym samym czasie dwa inserty od dwóch użytkowników. Oczywiście polecenie setval działa w trigger-ach i nie ma z tym żadnego problemu no chyba, że trafisz na w/w problem.
Proponuje takie rozwiązanie:

CREATE TABLE tab
(
id serial primary key,
nazwa varchar(50)
)
WITH (OIDS = FALSE);
create unique index tab_ixu on tab (trim(upper(nazwa)));

a do wyświetlania tak by wyła ciągła numeracja w polu lp użyć poniższego select-a

select id,row_number() over(order by upper(nazwa)) as lp, nazwa from tab order by upper(nazwa)