Unterdrücken "doppelter Schlüsselwert verletzt unique-constraint" - Fehler

Ich bin die Entwicklung einer Rails 3 app, nutzt Postgres als Datenbank. Ich habe die Tabelle unten gezeigt:

             Table "public.test"
    Column     |  Type   | Modifiers
---------------+---------+-----------
 id            | integer | not null
 some_other_id | integer |
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)
    "some_other_id_key" UNIQUE CONSTRAINT, btree (some_other_id)

Diese hat zwei Spalten:

  • - id, der Primärschlüssel (automatisch erstellt durch Schienen)
  • some_other_id, die die Schlüssel enthält, erzeugt durch ein anderes system. Diese id muss eindeutig sein, also ich habe ein unique key-Einschränkung für die Tabelle.

Nun, wenn ich versuche, einfügen einer Zeile mit einem doppelten some_other_id scheitert es (gute) und ich bekomme die folgende Ausgabe, die in meinem Postgres-logs:

ERROR:  duplicate key value violates unique constraint "some_other_id_key"

Das problem ist, dass es völlig Hauptschnur für meine app zu versuchen, und fügen Sie die gleichen ID zweimal, und meine logs sind als Spam-mit diesem "FEHLER" - Meldung, die verursacht verschiedene Probleme: - Dateien nehmen viel Speicherplatz auf der Festplatte, die Diagnostik verloren gehen in dem Lärm, Postgres hat, wegwerfen, diags, um die Protokolldateien in Größe, Grenzen, etc.

Weiß jemand, wie kann ich entweder:

  • Unterdrücken das Protokoll, entweder durch Unterdrückung, alle Protokolle über diesen Schlüssel, oder vielleicht durch die Angabe etwas über die Transaktion, die versucht, die INSERT.
  • Einige andere Postgres-Funktion, um vor Ort das doppelte Schlüssel und nicht versuchen, die INSERT. Ich habe gehört, Regeln und Trigger, aber ich kann nicht kommen, entweder um zu arbeiten (obwohl ich bin kein Postgres-Experte).

Beachten Sie, dass jede Lösung muss die Arbeit mit den Schienen, die Ihre Einsätze wie dieser:

INSERT INTO test (some_other_id) VALUES (123) RETURNING id;
  • "Das problem ist, dass es völlig Hauptschnur für meine app, um zu versuchen und ad der gleichen ID zweimal," Das scheint mir seltsam. Warum sollte die app versuchen, um doppelte Werte einfügen, und warum Sie denken, es ist normal?
  • BTW Ihr einfügen INSERT INTO test (some_other_id) VALUES (123) RETURNING id; nicht geben Sie einen Wert für id (die ist NICHT NULL), so ist es sollte auch gegen die NICHT-NULL-Beschränkung für die id. Hat Sie geben uns die wahre Tabelle-definition? ist id eine Seriennummer, durch Zufall?
InformationsquelleAutor Alex Hockey | 2012-09-12
Schreibe einen Kommentar