So habe ich derzeit eine primäre Postgres-Datenbank, die mehrere Benutzer aus verschiedenen Anwendungen behandelt. Eines der Probleme hinsichtlich der Parallelität ist, dass wenn AppOne und AppTwo Benutzer gleichzeitig hinzufügen möchten.Verwenden Sie PostgreSQL Unique ID für Zeile beim Einfügen
Momentan wird AppOne eine Zufallszahl erzeugen (muss 10 Ziffern lang sein) und dann prüfen, ob der Wert in der Datenbank existiert, wenn er nicht existiert, wird er den Benutzer mit diesem Wert in a einfügen Spalte namens user_url
(für ihre URL verwendet).
Jetzt, wie Sie sich vorstellen können, wenn zwischendurch die Zeit für die Generierung, Prüfung oder das Einfügen von AppTwo eine Anfrage zum Hinzufügen eines Benutzers stellt, können wir wiederholt eindeutige Werte haben (es ist passiert). Ich möchte dieses Problem möglicherweise mit Postgres-Triggern lösen.
Ich weiß, dass ich Transaktionen verwenden kann, aber ich möchte nicht die Datenbank halten, ich würde lieber die eindeutige Zahlenfolge durch eine Funktion erstellen und auf der Datenbankseite auslösen, so wie ich es skaliere Ich muss mich nicht um die Bedingungen im Rennen sorgen. Sobald der Auslöser seine Sache macht, kann ich dann den neu hinzugefügten Benutzer mit all seinen Daten einschließlich der eindeutigen ID erhalten.
so ideal
CREATE OR REPLACE FUNCTION set_unique_number(...) RETURNS trigger AS $$
DECLARE
BEGIN
....something here
RETURN new;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER insert_unique_url_id BEFORE INSERT ... PROCEDURE
set_unique_number(...);
wäre es eine Funktion sein, die die Nummer und fügt es in die Zeile erzeugt, die durch einen Auslöser von BEFORE INSERT
ausgeführt werden würde. Ich kann mich irren.
Jede Hilfe/würden Vorschläge hilfreich
EDIT sein: Ich will es so, dass es keine Sequenz zu den Zahlen. Auf diese Weise konnten die Benutzer die URL des nächsten Benutzers nicht erraten.
Dank
Überprüfen Sie die Verwendung von Sequenzgeneratoren in PostgreSQL. Sie können die Eindeutigkeit ohne den Overhead und die Ungewissheit, in einer lesekonsistenten Umgebung zu validieren, virtuell garantieren. –