0Pricing
SQL Academy · Ders

UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)

ON CONFLICT DO UPDATE ile idempotent eklemeler uygulayın, EXCLUDED kullanın ve doğru çakışma hedefini seçin.

UPSERT: ON CONFLICT DO UPDATE (PostgreSQL), CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

UPSERT Nedir?

UPSERT = mevcut değilse INSERT, mevcutsa UPDATE işlemidir. PostgreSQL bunu INSERT ... ON CONFLICT biçiminde yazar.

ON CONFLICT DO NOTHING

Yoksa ekler, yinelenen kayıt varsa sessizce atlar:

INSERT INTO users (email, full_name)
VALUES ('alice@example.com', 'Alice')
ON CONFLICT (email) DO NOTHING;

ON CONFLICT DO UPDATE

Yoksa ekler, aksi hâlde belirli sütunları günceller:

INSERT INTO users (email, full_name, last_login)
VALUES ('alice@example.com', 'Alice', NOW())
ON CONFLICT (email)
DO UPDATE SET
  full_name  = EXCLUDED.full_name,
  last_login = EXCLUDED.last_login;

EXCLUDED: Önerilen Satır

DO UPDATE içinde EXCLUDED.col, "INSERT işleminin eklemeye çalıştığı değeri" ifade eder. Çıplak sütun adı (veya users.col) mevcut satırı ifade eder.

ON CONFLICT (email)
DO UPDATE SET visits = users.visits + 1,
              last_seen = EXCLUDED.last_seen;

Çakışma Hedefi

Bir UNIQUE kısıtını veya PRIMARY KEY'i adlandırmanız gerekir:

ON CONFLICT (email)             -- column with UNIQUE
ON CONFLICT (user_id, day)      -- composite UNIQUE
ON CONFLICT ON CONSTRAINT users_email_key   -- by name

Koşullu UPSERT (DO UPDATE içinde WHERE)

Yalnızca bir koşul sağlandığında güncelleyin:

INSERT INTO inventory (product_id, qty)
VALUES (42, 5)
ON CONFLICT (product_id)
DO UPDATE SET qty = inventory.qty + EXCLUDED.qty
WHERE inventory.qty + EXCLUDED.qty <= 1000;

Çok Satırlı UPSERT

Birçok satır ekleyin; her satır ayrı ayrı işlenir:

INSERT INTO page_views (path, day, count)
VALUES ('/home', CURRENT_DATE, 1), ('/about', CURRENT_DATE, 1)
ON CONFLICT (path, day)
DO UPDATE SET count = page_views.count + EXCLUDED.count;

UPSERT ile RETURNING

Eklenmiş veya güncellenmiş olmasına bakılmaksızın ortaya çıkan satırı geri alın:

INSERT INTO users (email, full_name)
VALUES ('alice@example.com', 'Alice')
ON CONFLICT (email) DO UPDATE
  SET full_name = EXCLUDED.full_name
RETURNING id, full_name;

İdempotent İş Akışları

UPSERT yeniden denemeleri güvenli hâle getirir. Web kancanız iki kez tetiklenirse ikinci çağrı yeni bir kayıt oluşturmak yerine aynı satırı günceller.

MERGE (SQL Standardı, PG15+)

PostgreSQL 15, tek bir ifadede INSERT/UPDATE/DELETE işlemlerini gerçekleştirebilen SQL standardındaki MERGE komutunu ekledi:

MERGE INTO users AS u
USING (VALUES ('alice@example.com','Alice')) AS src(email, name)
ON u.email = src.email
WHEN MATCHED THEN UPDATE SET full_name = src.name
WHEN NOT MATCHED THEN INSERT (email, full_name) VALUES (src.email, src.name);

UPSERT Ne Zaman Kullanılmamalı

UPSERT bir UNIQUE kısıtı gerektirir. Böyle bir kısıtınız yoksa genellikle ayrı bir SELECT çalıştırıp ardından INSERT veya UPDATE yapmak istersiniz; ancak yarış koşullarına dikkat edin ve uygun kilitlemeyle bir işlem içine alın.

Özet

ON CONFLICT, PostgreSQL'in temiz ve atomik UPSERT çözümüdür.

  • "Yoksa ekle" işlemi için DO NOTHING
  • Gerçek UPSERT işlemi için DO UPDATE
  • EXCLUDED = önerilen satır
  • Her zaman bir çakışma hedefi adlandırın

Hızlı Kontrol

ON CONFLICT (email) DO UPDATE SET last_login = EXCLUDED.last_login ifadesinde EXCLUDED neyi ifade eder?

Sıkça Sorulan Sorular

“UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)” dersi ücretsiz mi?

Evet — “UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)” dersinde ne öğreneceğim?

ON CONFLICT DO UPDATE ile idempotent eklemeler uygulayın, EXCLUDED kullanın ve doğru çakışma hedefini seçin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Birden Çok Satırla INSERT
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. FROM ve JOIN Tarzı Güncellemelerle UPDATE
  4. USING ile DELETE ve Güvenli Kalıplar
← SQL Academy Sayfasına Dön