Saya sudah membaca tentang UPSERT
implementasi yang berbeda di PostgreSQL, tetapi semua solusi ini relatif lama atau relatif eksotis (menggunakan CTE yang dapat ditulis , misalnya).
Dan saya bukan ahli psql sama sekali untuk mencari tahu segera, apakah solusi ini sudah lama karena mereka direkomendasikan atau mereka (well, hampir semuanya) hanya contoh mainan yang tidak sesuai untuk penggunaan produksi.
Apa cara yang paling aman untuk menerapkan UPSERT di PostgreSQL?
postgresql
plpgsql
upsert
shabunc
sumber
sumber
UPDATE (2015-08-20):
Sekarang ada implementasi resmi untuk menangani upert melalui penggunaan
ON CONFLICT DO UPDATE
(dokumentasi resmi). Pada saat penulisan ini, fitur ini saat ini berada di PostgreSQL 9.5 Alpha 2, yang tersedia untuk diunduh di sini: Direktori sumber postgres .Berikut ini sebuah contoh, dengan asumsi
item_id
adalah Kunci Utama Anda:Pos Asli ...
Ini adalah implementasi yang saya dapatkan ketika ingin mendapatkan visibilitas ke apakah penyisipan atau pembaruan terjadi.
Definisi
upsert_data
adalah untuk mengkonsolidasikan nilai menjadi satu sumber daya, daripada harus menentukan harga dan item_id dua kali: Sekali untuk pembaruan, sekali lagi untuk memasukkan.Jika Anda tidak menyukai penggunaan
upsert_data
, berikut ini adalah implementasi alternatif:sumber
Ini akan memberi tahu Anda apakah penyisipan atau pembaruan terjadi:
Jika pembaruan terjadi, Anda akan mendapatkan sisipan 0, jika tidak masukkan 1 atau kesalahan.
sumber