yerine gerçekleşmişse NASILPostgres - CONFLICT - Bir GÜNCELLEME INSERT
CREATE TABLE foo
(
f0 int,
time_stamp timestamp,
CONSTRAINT foo_pk PRIMARY KEY (f0)
)
Ben yüksek hacimlerde bu tabloyla yazmaya gerek bir tablo var biliyorum, bu yüzden performans anahtarıdır. Bazen, f0
için varolan bir değere sahip bir kayıt yazacağım ve şimdiki zamana time_stamp
güncelleyecektir. Bunun için bir ON CONFLICT..DO UPDATE
kullanın.
sorunu, bir INSERT
'un veya UPDATE
'un olup olmadığını bilmem gerekmesidir.
İkinci bir is_update
sütununu kullanıyorum. yerleştirirken, false
takıp
`ON CONFLICT .. DO UPDATE set is_update=true`
Sonra İstediğimi elde etmek RETURNING is_update
kullanın. Bununla ilgili sorun, verilerin kendisiyle ilgili olmayan ek bir sütunun tanıtılmasıdır.
[bir Upsert PostgreSQL 9.5+ Upsert ile bir güncelleme olup olmadığını öğrenmek için nasıl?] (Http: //stackoverflow.com/questions/34762732/how-to-find-out-if-an-upsert-was-an-update-with-postgresql-9-5-upsert) – lad2025
@ lad2025 Bu soruyu daha önce bulamadınız mı, Teşekkürler. Bununla birlikte, önerilen çözüm denediğimi söylediğim şeydi, ancak bu "UPSERT/ON CONFLICT" özelliğinden yoksun olduğumu hissettiğim bazı işlevler için masamdaki ek sütun nedeniyle kaçınmak isterim. – Sagi
[PostgreSQL Upsert, sistem sütunlarını XMIN, XMAX ve diğerlerini kullanarak eklenen ve güncelleştirilen satırları ayırt eder] (https://stackoverflow.com/q/39058213/1995738) – klin