i mit Postgres und Asynchron-Task-Queue bin zu kämpfenPostgres create table asynchron
Ich versuche, eine neue Tabelle zu erstellen - was Arbeiter erreichen diesen Punkt zuerst - Erstellen Sie die Tabelle
mit dem statment
create table if not exists
‚Tabelle ist bereits vorhanden‘ Exception ausgelöst
dies wirklich seltsam ist, denn wenn so whith einzigen Arbeiter zu tun - also versuchen, die Registerkarte zu erstellen le zweimal synchron, das zweite Mal schreibt er eine Nachricht (keine Ausnahme)
PostgreSQL DDL ist transaktional. Wahrscheinlich Ihr zweiter Mitarbeiter, der versucht, eine Tabelle zu erstellen, während die erste Arbeitertabelle bereits erstellt wurde, die Transaktion jedoch noch nicht ausgeführt wurde. Aber in diesem Fall habe ich Fehler wie 'ERROR: doppelte Schlüsselwert verletzt eindeutige Einschränkung" pg_type_typname_nsp_index "DETAIL: Schlüssel (typname, typnamespace) = (foo, 16386) bereits existiert.' – Abelisto
ich Debuggen lokal, und das Problem sieht wie Der 'Wenn nicht existiert' Befehl wird ausgeführt, bevor die Sperre freigegeben wird. dh der erste Prozess erstellt die Tabelle, der zweite wartet auf die Sperre (die Ausführung der create-Tabelle wird nicht beendet), beim ersten Commit wird die Sperre ausgelöst, und die zweite Ausnahme wird ausgelöst - die Tabelle existiert bereits – gCoh