Nach vielen meiner Frage googeln ist unten beschrieben:PostgreSQL Teil Indizes und UPSERT
CREATE TABLE security (
id SERIAL PRIMARY KEY,
vendor VARCHAR(20),
external_id VARCHAR(20),
extinct BOOLEAN DEFAULT FALSE
);
CREATE UNIQUE INDEX unique_vendor ON security(vendor, extinct) where vendor is not null;
CREATE UNIQUE INDEX unique_external_id ON security(external_id, extinct) where external_id is not null;
Der Versuch, Werte einzufügen:
insert into security (vendor, external_id, extinct)
values('Legion', 'LGNONE', false)
ON CONFLICT(vendor, external_id, extinct) DO UPDATE
SET vendor = 'Legion', external_id = 'LGNONE', extinct = false;
Ergebnisse in:
[42P10] ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
Altho dieser Werke (pro Spezifikation):
insert into security (vendor, external_id, extinct)
values('Legion', 'LGNONE', false)
ON CONFLICT DO NOTHING;
PostgreSQL documentation stands that it should work
PostgreSQL v9.5
Mein Ziel ist es Weg zu finden, eindeutigen Index für mehrere Spalten auf NULL festlegbare auf diese Tabelle zu erstellen und alte Zeilen mit neuen auf UPSERT
Das ist brilliant Vorschlag und Antwort! Vielen Dank! – cingulata