| 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: | Whole Thread | Raw Message | 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 ===
| 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 |