2012-04-04 9 views
2

Ich habe kürzlich Postgres Ausschluss Einschränkungen entdeckt, die exacatly ermöglichen, was ich gefragt habe (nun, zumindest für Zeitbereiche für den Moment, da ein Nummernbereichstyp noch nicht existiert).Wie erzwinge nicht überlappende Bereiche in RDBMS (transaktionssicher)?

Von dem, was ich verstehe, haben Orakel und andere RDBMS keine äquivalente Funktion, um Einschränkungen auszuschließen. Ihre einzige Möglichkeit, Einfügungen in eine solche Tabelle zu tätigen, ist das Sperren der Tabelle. Oder gibt es einen anderen Weg?

bearbeiten: (@ Clodoaldo) postgres verwendet Sperren auf Zeilenebene, wenn zwei Transaktionen widersprüchliche Datensätze einfügen. Meine Frage ist: Wenn ein RDBMS keine Ausschlussbeschränkungen enthält, denke ich, dass Sie keine andere Möglichkeit haben, als die gesamte Tabelle zu sperren, wenn Sie nicht überlappende Bereiche und Transaktionssicherheit wollen - ist das richtig? Oder gibt es einen Weg, den ich nicht kenne?

Bei der Arbeit musste ich mehrere Male Tabellen mit nicht überlappenden Bereichen entwerfen. Ich kannte keinen transaktionssicheren Weg, um die Datenkonsistenz in der Datenbank zu erzwingen. Als ich über die Ausschlussbeschränkungen gelesen habe, dachte ich, dass es dieses Problem gelöst hat, aber es ist nicht Standard, also ist mein Chef nicht sehr daran interessiert, es zu benutzen.

+0

Ich musste das Handbuch lesen, um Ausschlussbeschränkungen einzuführen, aber ich bin immer noch verwirrt über Ihre Frage. Könnten Sie es näher erläutern? Tritt die Sperre nicht auch beim Einfügen in eine Tabelle mit einer Ausschlussbedingung auf? –

+0

Ich weiß nicht darüber. Ich dachte, Postgres benutzt irgendwie den Index, der notwendig ist, damit die Exclude-Einschränkung einen Fehler auslöst, wenn die zweite von zwei widersprüchlichen Einfüge-Transaktionen festgeschrieben wird. In den nächsten Tagen werde ich mit Ausschlussbeschränkungen experimentieren. – plainswalker

Antwort

Verwandte Themen