Re: Sequenz mit Ausnahmen

From: "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Sequenz mit Ausnahmen
Date: 2006-03-07 16:05:15
Message-ID: 20060307160515.GA5469@webserv.wug-glas.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

am 07.03.2006, um 16:26:03 +0100 mailte Daniel Seichter folgendes:
> Hallo,
>
> welche Möglichkeiten habe ich, bei einer Sequenz, die von 1 bis
> "unendlich" laufen soll, einen Wertebereich auszunehmen?!
>
> Die Werte 64000 bis 65000 sollen NICHT vergeben werden. Die Sequenz
> zählt quasi eine Seriennummer hoch, die als Nummer auch in der
> Fertigung verwendet wird.

Schnellschuß:

test=# create table foo (id serial check (id not between 5 and 10));
NOTICE: CREATE TABLE will create implicit sequence "foo_id_seq" for serial column "foo.id"
CREATE TABLE
test=#
test=#
test=# insert into foo values (default);
INSERT 0 1
test=# insert into foo values (default);
INSERT 0 1
test=# insert into foo values (default);
INSERT 0 1
test=# insert into foo values (default);
INSERT 0 1
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
ERROR: new row for relation "foo" violates check constraint "foo_id_check"
test=# insert into foo values (default);
INSERT 0 1
test=# insert into foo values (default);
INSERT 0 1

test=# select * from foo;
id
----
1
2
3
4
11
12
(6 rows)

Es sollte möglich sein, für den einfachen CHECK-Constraint eine Funktion
zu basteln, die mit currval() prüft, wenn die untere Grenze erreicht
ist, und dann mit setval() den Sprung macht.

>
> Leider noch postgreSQL 7.4.8, aber bis zur Jahresmitte das Update auf
> 8.1 geplant.

Was ist, wenn bis dahin 8.2 da ist? ;-)

Andreas
--
Andreas Kretschmer (Kontakt: siehe Header)
Heynitz: 035242/47215, D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
=== Schollglas Unternehmensgruppe ===

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message A. Kretschmer 2006-03-07 16:07:53 Re: Sequenz mit Ausnahmen
Previous Message Peter Eisentraut 2006-03-07 16:01:22 Re: Sequenz mit Ausnahmen