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
109 yazı bulundu
PostgreSQL 18 Yenilikleri: Asynchronous I/O, Skip Scan, uuidv7, Virtual Generated Column, RETURNING OLD/NEW ve Temporal Constraint'ler
Veritabanı SERİ 16

PostgreSQL 18 Yenilikleri: Asynchronous I/O, Skip Scan, uuidv7, Virtual Generated Column, RETURNING OLD/NEW ve Temporal Constraint'ler

PostgreSQL 18'de generated column varsayılan olarak virtual: bir milyon satırlık tabloya kolon eklemek 17'deki gibi tabloyu yeniden yazmıyor, ama index de konamıyor. io_method ile asynchronous I/O, skip scan, BUFFERS'ın varsayılan olduğu EXPLAIN, uuidv7(), RETURNING OLD/NEW, WITHOUT OVERLAPS, varsayılan data checksum, OAuth ve logical replication değişiklikleri; her biri 17'deki karşılığıyla.

14 Kas 2026 9 dk 3
Eski PostgreSQL Projelerini Okumak: 13'ten 17'ye Önemli Değişiklikler
Veritabanı SERİ 15

Eski PostgreSQL Projelerini Okumak: 13'ten 17'ye Önemli Değişiklikler

14'ten 17'ye geçen bir projeyi bozan şey yeni özellikler değil, kaldırılan ve taşınanlardır: pg_start_backup 15'te, public schema'daki CREATE yetkisi 15'te, pg_stat_bgwriter'ın checkpoint kolonları 17'de gitti. Aynı SQL dosyası 13–17'de çalıştırılarak multirange, MERGE, SQL/JSON, JSON_TABLE ve builtin collation'ın geldiği sürümler, pg_upgrade'in public yetkisini taşıması ve destek dışı kalan 14'ten çıkış.

14 Kas 2026 9 dk 4
PostgreSQL'de Güvenlik ve Operasyon Temelleri: Role, GRANT, pg_hba, SCRAM, Backup ve Major Upgrade
Veritabanı SERİ 14

PostgreSQL'de Güvenlik ve Operasyon Temelleri: Role, GRANT, pg_hba, SCRAM, Backup ve Major Upgrade

PostgreSQL'de güvenlik üç role ile başlar: şemanın sahibi, yalnızca DML yapan uygulama ve bakım için superuser; default privileges yalnızca adı verilen rolün oluşturduğu nesnelere uygulanır. GRANT, pg_read_all_data, RLS, pg_hba.conf, SCRAM, Npgsql'de SSL Mode=VerifyFull, pg_dump/pg_restore ile restore testi, WAL arşiviyle PITR ve 18'in checksum ve istatistik değişiklikleriyle pg_upgrade.

14 Kas 2026 11 dk 4
PostgreSQL Extension'ları: pg_stat_statements, pg_trgm, pgcrypto, citext, unaccent ve Managed Ortamlarda Extension
Veritabanı SERİ 13

PostgreSQL Extension'ları: pg_stat_statements, pg_trgm, pgcrypto, citext, unaccent ve Managed Ortamlarda Extension

Bir extension'ı kimin kurabileceğini trusted/untrusted ayrımı, ne zaman çalışacağını shared_preload_libraries belirler: citext'i veritabanı sahibi kurar, pg_buffercache superuser ister, pg_stat_statements preload edilmeden kurulsa da çalışmaz. Sürüm güncelleme, citext ve pgcrypto'nun tuzakları, pg_cron, TimescaleDB ve Citus lisansları, Azure ve RDS'te izin listeleri ve pg_upgrade'i durduran eksik kütüphane.

14 Kas 2026 13 dk 4
EF Core ile PostgreSQL: Npgsql Provider, snake_case, Array/JSON Mapping, Enum, xmin Concurrency ve Migration Farkları
Veritabanı SERİ 12

EF Core ile PostgreSQL: Npgsql Provider, snake_case, Array/JSON Mapping, Enum, xmin Concurrency ve Migration Farkları

EF Core'u PostgreSQL'e taşımak UseNpgsql'den fazlası: karşılaştırma büyük/küçük harfe duyarlıdır ve SQL Server'da çalışan == araması sessizce boş döner. EFCore.NamingConventions ile snake_case, text[] ve @> çevirisi, jsonb'ye eşlenen complex type ve ExecuteUpdate ile jsonb_set, PostgreSQL enum, uuid v7, xmin ile concurrency token, generated tsvector ve CREATE INDEX CONCURRENTLY'nin migration'ı transaction dışına taşıması.

14 Kas 2026 10 dk 4
Npgsql ve Dapper ile PostgreSQL: NpgsqlDataSource, Type Mapping, COPY ve LISTEN/NOTIFY
Veritabanı SERİ 11

Npgsql ve Dapper ile PostgreSQL: NpgsqlDataSource, Type Mapping, COPY ve LISTEN/NOTIFY

.NET'ten PostgreSQL'e uygulama boyunca tek bir NpgsqlDataSource ile bağlanılır; timestamptz'ye yalnızca UTC değer yazılır, Dapper ise Kind'ı belirsiz DateTime'ı hata vermeden üç saat kaydırabilir. DI ve pool varsayılanları, = ANY(@ids), DateOnly ve jsonb, Dapper'ın enum'ı integer göndermesi, 100.000 satırda Execute, NpgsqlBatch ve binary COPY, otomatik prepare, LISTEN/NOTIFY ile cache invalidation ve OpenTelemetry.

14 Kas 2026 10 dk 4
PostgreSQL Full-Text Search: tsvector, tsquery, Türkçe Configuration, unaccent ve pg_trgm
Veritabanı SERİ 10

PostgreSQL Full-Text Search: tsvector, tsquery, Türkçe Configuration, unaccent ve pg_trgm

PostgreSQL'de Türkçe arama için turkish configuration yeterli bir başlangıç ama stemmer'ı kusursuz değil: "kasabalar" bulunurken "kasaba" bulunamayabilir; prefix araması, unaccent ve pg_trgm bu boşlukları kapatır. tsvector/tsquery, websearch_to_tsquery, 18'de full-text'in collation provider'ı kullanması ve İ/ı, setweight'li STORED generated column ve GIN, ts_rank, ts_headline, typo toleransı ve Elasticsearch'e ne zaman geçileceği.

14 Kas 2026 10 dk 4
PostgreSQL'de Transaction, Isolation ve Locking: Serializable SSI, SELECT FOR UPDATE SKIP LOCKED ve Advisory Lock
Veritabanı SERİ 09

PostgreSQL'de Transaction, Isolation ve Locking: Serializable SSI, SELECT FOR UPDATE SKIP LOCKED ve Advisory Lock

PostgreSQL'de okuyan yazanı hiçbir isolation level'da beklemez; REPEATABLE READ ve SERIALIZABLE çakışmayı kilitle değil 40001 hatasıyla çözer, bu yüzden retry şarttır. Lost update ve write skew denemeleri, foreign key'i bekleten FOR UPDATE yerine FOR NO KEY UPDATE, SKIP LOCKED ile dört worker'lı outbox relay, advisory lock, deadlock, ALTER TABLE'ın lock kuyruğu ve EF Core execution strategy ile retry.

14 Kas 2026 12 dk 4
MVCC, VACUUM ve Autovacuum: Dead Tuple, Bloat, HOT Update ve Transaction ID Wraparound
Veritabanı SERİ 08

MVCC, VACUUM ve Autovacuum: Dead Tuple, Bloat, HOT Update ve Transaction ID Wraparound

PostgreSQL'de UPDATE satırı yerinde değiştirmez, yeni sürüm yazar; eski sürümü VACUUM temizler ama dosyayı küçültmez, alanı yeniden kullanıma açar. 40.000 satırlık tabloyu iki katına çıkaran tek UPDATE, VACUUM FULL'un okumayı da durduran kilidi, fillfactor 80 ile %100 HOT update, tablo bazında autovacuum eşiği, açık kalan bir transaction'ın VACUUM'u durdurması ve transaction ID wraparound'a karşı freeze.

14 Kas 2026 12 dk 3
PostgreSQL'de EXPLAIN Okumak: ANALYZE, BUFFERS, Scan ve Join Node'ları, Statistics ve pg_stat_statements
Veritabanı SERİ 07

PostgreSQL'de EXPLAIN Okumak: ANALYZE, BUFFERS, Scan ve Join Node'ları, Statistics ve pg_stat_statements

PostgreSQL'de bir planı okurken önce her node'un tahmini satır sayısını EXPLAIN ANALYZE'ın gerçek değeriyle karşılaştırırsın; planner'ın kararları o tahmine dayanır. Cost'un elle hesabı, 18'de varsayılan olan BUFFERS, loops ve ondalıklı rows, nested loop, hash ve merge join, 13 kat yanılan tahmini düzelten CREATE STATISTICS, pg_stat_statements, GENERIC_PLAN ve EF Core sorgusunun planını parametreleriyle yakalayan auto_explain.

14 Kas 2026 17 dk 5
PostgreSQL Index Türleri: B-tree, Hash, GIN, GiST, SP-GiST, BRIN ve Partial/Expression Index
Veritabanı SERİ 06

PostgreSQL Index Türleri: B-tree, Hash, GIN, GiST, SP-GiST, BRIN ve Partial/Expression Index

PostgreSQL'de index türünü kolonun tipi değil sorgunun biçimi belirler: eşitlik ve aralık için B-tree, array/JSONB ve ILIKE '%...%' için GIN, çakışma için GiST, zamana göre büyüyen tablolar için BRIN. 18'in skip scan'iyle 10.328 yerine 26 page okuyan sorgu, deduplication, INCLUDE ve index-only scan, 21 MB'lık B-tree yerine 24 kB'lık BRIN, hash, partial ve expression index, INVALID kalan CONCURRENTLY index'i ve HOT update'i bozan index.

14 Kas 2026 14 dk 4
PostgreSQL'de JSONB: Operator'ler, SQL/JSON Function'ları, GIN Index ve Ne Zaman Kullanmamalı?
Veritabanı SERİ 05

PostgreSQL'de JSONB: Operator'ler, SQL/JSON Function'ları, GIN Index ve Ne Zaman Kullanmamalı?

JSONB, JSON'ı yazarken bir kez ayrıştırıp binary yapıda saklar; disk kazandırmaz ama @>, ? ve jsonpath ile sorgulanabilir ve GIN ile index'lenebilir. Bookstore'un books.attributes kolonu üzerinde json/jsonb farkı, operator'ler, jsonb_set, 17'nin JSON_VALUE ve JSON_TABLE'ı, jsonb_ops ile jsonb_path_ops'un hangi sorguda index kullandığı, expression index, tek sayaç için 175 kB WAL üreten TOAST tuzağı, tahmin hataları ve EAV'nin JSON hâli.

14 Kas 2026 13 dk 4
Blog Haritası