[Postgres] UNIQUE über mehrere Tabellen

Moien

Ich hab hier 3 Tabellen mit der Column „ID“, jeweils als prim. key angelegt. Nun soll jede ID nur einmal insgesamt vorkommen. D.h. eine ID darf nicht in 2 Tabellen vorkommen.

Wie stellt man sowas an ?

Danke.

Hi,
habe schon lange nix mehr mit Postgres gemacht, aber konnte man nicht mehrere ID-Felder auf die gleiche Sequenz definieren? (also dieses Autoincrement Gegenstück von Postgres)

ohne garantie auf mein Gedächtnis
Quaser

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

habe schon lange nix mehr mit Postgres gemacht, aber konnte
man nicht mehrere ID-Felder auf die gleiche Sequenz
definieren? (also dieses Autoincrement Gegenstück von
Postgres)

Ja, das geht, das ist auch der momentane Aufbau. Ich wollte es eigentlich nicht verwenden, weils eben nicht zu SQL99 gehört.

Aber evtl. kann man ja die zugrundeliegenden Functionen auf andere DBs übertragen. Ich bräuchte ja nur nextval(‚sequence‘) in einer Multiuser-sicheren Variante.

Danke.

Hi,
dann mach es doch über einen Insert-Trigger und eine Tabelle die die Zähler enthält. Das kannst du dann einfach auf eine andere DB übertragen. (Zumindest auf jede die Trigger kennt)

Gruss
Quaser

habe schon lange nix mehr mit Postgres gemacht, aber konnte
man nicht mehrere ID-Felder auf die gleiche Sequenz
definieren? (also dieses Autoincrement Gegenstück von
Postgres)

Ja, das geht, das ist auch der momentane Aufbau. Ich wollte es
eigentlich nicht verwenden, weils eben nicht zu SQL99 gehört.

Aber evtl. kann man ja die zugrundeliegenden Functionen auf
andere DBs übertragen. Ich bräuchte ja nur nextval(‚sequence‘)
in einer Multiuser-sicheren Variante.

Danke (owt)
.

Hallo,

ein INSERT Trigger ist aber nicht Multi-User-Fähig da er im Transaktionsmodell eingebunden ist. Das ist ja gerade der Vorteil mit den Sequenzen.

Du kannst autonome Transaktionen verwenden, aber die kenne ich jetzt nur von Oracle und die kann eh Sequenzen. Vielleicht kannst Du eine Prozedur unter einem anderen User laufen lassen. Das wäre dasselbe.

Von einer Applikation heraus geht es über den Umweg einer zweiten DB-Verbindung in Autocommit. (Das ist natürlich übelst)
Oder über globale Variable, wobei du deren Sichtbarkeit prüfen musst.

Gruß

Peter