<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - [PostgreSQL] Obniżanie sekwencji]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1477&amp;type=atom"/>
	<updated>2013-03-24T21:16:25Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1477</id>
		<entry>
			<title type="html"><![CDATA[Odp: [PostgreSQL] Obniżanie sekwencji]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4118#p4118"/>
			<content type="html"><![CDATA[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)]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-03-24T21:16:25Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4118#p4118</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[PostgreSQL] Obniżanie sekwencji]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4115#p4115"/>
			<content type="html"><![CDATA[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...]]></content>
			<author>
				<name><![CDATA[rydlik]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1559</uri>
			</author>
			<updated>2013-03-24T09:44:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4115#p4115</id>
		</entry>
</feed>
