Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
186 yazı bulundu
psql ile Günlük Çalışma: Meta-Command'lar, \x, \timing, \copy, \watch, \gexec, .psqlrc, Schema ve search_path
Veritabanı SERİ 24

psql ile Günlük Çalışma: Meta-Command'lar, \x, \timing, \copy, \watch, \gexec, .psqlrc, Schema ve search_path

psql'de COPY dosyayı sunucu diskine yazar ve özel yetki ister; \copy aynı işi istemci makinesinde, senin yetkilerinle yapar. \d ailesi, \x ve \timing, \gset ve \gexec ile üretilen SQL, \copy ile CSV, \watch, ON_ERROR_STOP'lu script, .psqlrc, schema ve search_path tuzağı, PostgreSQL 15'te public schema yetkisi ve pg_dump ile tek tabloyu dev ortamına almak.

15 Kas 2026 13 dk 14
PostgreSQL Trigger'ları: BEFORE/AFTER, Row ve Statement Seviyesi, Transition Table'lar, updated_at ve Audit Trigger'ı, Event Trigger'lar
Veritabanı SERİ 23

PostgreSQL Trigger'ları: BEFORE/AFTER, Row ve Statement Seviyesi, Transition Table'lar, updated_at ve Audit Trigger'ı, Event Trigger'lar

PostgreSQL'de satırı değiştiren iş BEFORE ROW trigger'ında NEW üzerinden, başka tabloya yazan iş AFTER trigger'ında yapılır; AFTER ROW trigger'ları statement bitince çalışır. updated_at ve WHEN koşulu, jsonb audit trigger'ı, 200.000 satırlık UPDATE'te row ve transition table'lı statement trigger maliyeti, join view için INSTEAD OF, DDL kaydeden event trigger ve EF Core'da RETURNING ile trigger değerini okumak.

15 Kas 2026 17 dk 17
PostgreSQL'de Function ve Procedure: SQL ve PL/pgSQL, RETURNS TABLE, Volatility, SECURITY DEFINER ve CALL ile Transaction Kontrolü
Veritabanı SERİ 22

PostgreSQL'de Function ve Procedure: SQL ve PL/pgSQL, RETURNS TABLE, Volatility, SECURITY DEFINER ve CALL ile Transaction Kontrolü

PostgreSQL'de function satır ve değer döndürür, SELECT ile çağrılır ve transaction'ı bitiremez; procedure CALL ile çağrılır ve içinde COMMIT yapabilir. İşaretsiz function VOLATILE sayılır ve index kullanımını engeller. LANGUAGE sql'in inline edilmesi, RETURNS TABLE, PARALLEL SAFE, PL/pgSQL ile ISBN kontrolü ve CHECK constraint, stok rezervasyonu, SQLSTATE ile hata yönetimi, SECURITY DEFINER ve Npgsql/Dapper'dan çağırmak.

15 Kas 2026 25 dk 16
PostgreSQL'de View ve Materialized View: Updatable View, security_invoker, REFRESH CONCURRENTLY ve pg_cron ile Zamanlama
Veritabanı SERİ 21

PostgreSQL'de View ve Materialized View: Updatable View, security_invoker, REFRESH CONCURRENTLY ve pg_cron ile Zamanlama

PostgreSQL'de materialized view sonucu diske yazar ve yalnızca REFRESH ile güncellenir; düz REFRESH okumaları kilitler, CONCURRENTLY kilitlemez ama unique index ister. View'ın SELECT * ve kolon değişikliği kısıtları, otomatik updatable view ve WITH CHECK OPTION, RLS'li tabloda security_invoker'ın farkı, pg_cron ile 10 dakikada bir refresh, EF Core'da keyless entity eşlemesi ve ne zaman ayrı read model tablosu.

15 Kas 2026 16 dk 15
PostgreSQL Aggregate, Array ve Koşullu Function'lar: FILTER, ORDER BY'lı string_agg/array_agg, unnest, ANY/ALL, COALESCE ve GREATEST
Veritabanı SERİ 20

PostgreSQL Aggregate, Array ve Koşullu Function'lar: FILTER, ORDER BY'lı string_agg/array_agg, unnest, ANY/ALL, COALESCE ve GREATEST

PostgreSQL'de FILTER (WHERE ...) her aggregate'e kendi koşulunu verir ve hiç satır yokken count dışındaki aggregate'ler NULL döner, boş array değil. ORDER BY'lı string_agg, array_agg ve jsonb_agg, medyan ve percentile, unnest ve array operatörleri, GIN index'in @> ile çalışıp = ANY ile çalışmaması, IN listesinin aslında = ANY olması, NOT IN'in NULL tuzağı ve GREATEST'in NULL davranışının lehçeden lehçeye değişmesi.

15 Kas 2026 14 dk 14
PostgreSQL'de Tarih, Saat ve Interval: now() ve clock_timestamp(), date_trunc, extract, AT TIME ZONE, age, date_bin ve generate_series
Veritabanı SERİ 19

PostgreSQL'de Tarih, Saat ve Interval: now() ve clock_timestamp(), date_trunc, extract, AT TIME ZONE, age, date_bin ve generate_series

PostgreSQL'de now() transaction'ın başladığı anı döndürür ve transaction boyunca değişmez; gerçek saat için clock_timestamp() gerekir. AT TIME ZONE'un iki yönü, İstanbul gününe göre rapor, ay ekleme ve yaz saati kuralları, age ve justify_interval, extract, date_trunc ve date_bin ile zaman kovaları, generate_series ile boş günleri sıfırla doldurmak ve date_trunc'lı WHERE'in index'i neden kullanamadığı; SQL Server karşılıklarıyla.

15 Kas 2026 16 dk 14
PostgreSQL String, Regex ve Biçimlendirme Function'ları: concat_ws, format(), split_part, regexp_replace, to_char ve ICU Collation
Veritabanı SERİ 18

PostgreSQL String, Regex ve Biçimlendirme Function'ları: concat_ws, format(), split_part, regexp_replace, to_char ve ICU Collation

PostgreSQL'de || bir NULL yüzünden bütün metni kaybeder, concat_ws ise NULL'ı atlar; dinamik SQL'de değer USING ile, tablo ve kolon adı format('%I') ile verilir. split_part, substring, translate, regexp_* function'ları, to_char/to_number ile Türkçe sayı biçimi, ICU tr-TR collation ile initcap ve ILIKE, LIKE önek araması için text_pattern_ops ve ILIKE '%x%' için pg_trgm; Bookstore'da ISBN doğrulama ve slug üretimiyle.

15 Kas 2026 17 dk 15
Şema Değişikliğini Yönetmek: SQL Database Projects ve DACPAC (State-Based) ile DbUp ve Flyway (Migration-Based)
Veritabanı SERİ 24

Şema Değişikliğini Yönetmek: SQL Database Projects ve DACPAC (State-Based) ile DbUp ve Flyway (Migration-Based)

State-based araç rename'i bilmez: projede kolon adını değiştirince SqlPackage kolonu silip yeniden eklemeye çalıştı ve yalnız BlockOnPossibleDataLoss sayesinde durdu; refactorlog ile sp_rename üretti. Microsoft.Build.Sql 2.3.0 ile DACPAC, deploy script ve DeployReport, varsayılan olarak silinen elle eklenmiş index, yanlış fark üreten CHECK tanımı, DbUp'ın fark etmediği ve Flyway'in checksum ile yakaladığı değiştirilmiş migration.

15 Kas 2026 12 dk 14
SQL Server'da Veri Taşıma: BULK INSERT, bcp, OPENROWSET, BACPAC Export/Import ve Veritabanını Kopyalamak
Veritabanı SERİ 23

SQL Server'da Veri Taşıma: BULK INSERT, bcp, OPENROWSET, BACPAC Export/Import ve Veritabanını Kopyalamak

BULK INSERT'te MAXERRORS her hatayı atlamaz: kolon sayısı bozuk tek bir CSV satırı 200.000 satırlık yüklemeyi sıfırda durdurdu. Dosya yolunun sunucuya göre çözülmesi, Linux'ta desteklenmeyen CODEPAGE, CRLF dosyasında son kolona yapışan CR, staging ve doğrulama, BULK_LOGGED ve TABLOCK ile 43 MB'tan 0,5 MB'a inen log, OPENROWSET ve bcp, anonimleştirilmiş kopyadan SqlPackage ile BACPAC export/import.

15 Kas 2026 14 dk 13
SQL Server Agent: Job, Step, Schedule, Alert, Operator ve Database Mail; Linux ve Container'da Agent
Veritabanı SERİ 22

SQL Server Agent: Job, Step, Schedule, Alert, Operator ve Database Mail; Linux ve Container'da Agent

Docker'daki SQL Server'da Agent varsayılan olarak kapalıdır: job tanımı msdb'ye yazılır ama sp_start_job 'SQLServerAgent is not currently running' der ve hiçbir şey çalışmaz. Idempotent bir rapor procedure'ü, kaynak kontrolünde tutulan job script'i, retry ve bildirim ayarları, job sahibi ve msdb rolleri, Linux'ta desteklenmeyen alert'ler, Database Mail XPs ve Agent job'ı ile uygulamadaki background job arasındaki sınır.

15 Kas 2026 12 dk 13
SQL Server Bakımı: Index Fragmentation, Rebuild ve Reorganize, İstatistik Güncelleme, DBCC CHECKDB ve Ola Hallengren
Veritabanı SERİ 21

SQL Server Bakımı: Index Fragmentation, Rebuild ve Reorganize, İstatistik Güncelleme, DBCC CHECKDB ve Ola Hallengren

Index bakımında belirleyici olan fragmentation değil page density ve maliyettir: yüzde 39 fragmented bir index'te REORGANIZE offline REBUILD'in 3,6 katı, ONLINE rebuild 7 katı log üretti; rebuild sonrası UPDATE STATISTICS tam taramalı istatistiği yüzde 11 örneklemle değiştirdi. DBCC CHECKDB ile bozuk bir nonclustered index'i veri kaybetmeden onarmak ve Ola Hallengren'in IndexOptimize, DatabaseIntegrityCheck, DatabaseBackup procedure'leri.

15 Kas 2026 15 dk 11
SQL Server'da Backup ve Restore: Recovery Model, Full/Differential/Log Backup, Point-in-Time Restore ve Log'un Büyümesi
Veritabanı SERİ 20

SQL Server'da Backup ve Restore: Recovery Model, Full/Differential/Log Backup, Point-in-Time Restore ve Log'un Büyümesi

FULL recovery'de log'u yalnız log backup boşaltır: iki full backup'tan sonra log hâlâ %19,6 dolu ve LOG_BACKUP'ı bekliyordu, 400 MB'lık log sonunda Msg 9002 verdi. Full, differential ve log zinciri, COPY_ONLY'siz bir backup'ın differential'ı nasıl bozduğu (Msg 3136), ZSTD sıkıştırma, yanlışlıkla silinen 618 siparişi STOPAT ve STOPBEFOREMARK ile yan veritabanından geri getirmek ve güvenilmeyen .bak dosyaları.

15 Kas 2026 20 dk 9
Blog Haritası