Ich weiß nicht, ob dies ein Fehler, eine Funktion oder ein Problem in der Dokumentation ist.Wie bekomme ich ID der Zeile eingefügt auf Postgres 9.5 UPSERT
Sagen wir, ich diese Tabelle haben:
CREATE TABLE tags(
id BIGSERIAL PRIMARY KEY,
value TEXT UNIQUE NOT NULL,
creation_time TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
Wenn Sie INSERT INTO tags(value) VALUES('a') RETURNING id;
laufen Sie die ID des neu eingefügten Wert erhalten ABER:
es wieder Laufen mit INSERT INTO tags(value) VALUES('a') ON CONFLICT(value) DO NOTHING RETURNING id
NO geben ID, das bedeutet, entweder ist ein Fehler oder die Dokumentation ist falsch, weil Dokumentation http://www.postgresql.org/docs/9.5/static/sql-insert.html lautet:
INSERT INTO table_name [ AS alias ] [ (column_name [, ...]) ]
{ DEFAULT VALUES | VALUES ({ expression | DEFAULT } [, ...]) [, ...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
Dies bedeutet im Grunde, dass Sie CAN beide verwenden, hat jemand dieses gleiche Problem finden und es gelöst?