{"id":39289,"date":"2026-02-18T12:21:18","date_gmt":"2026-02-18T09:21:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/"},"modified":"2026-02-18T12:21:18","modified_gmt":"2026-02-18T09:21:18","slug":"neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/","title":{"rendered":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?"},"content":{"rendered":"<p><title>Ubuntu 18.04 \u00dczerine PostgreSQL Kurulumu ve Kullan\u0131m\u0131 Rehberi<\/title><br \/>\n<body><\/p>\n<p>Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL&#8217;in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.<\/p>\n<h2>Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?<\/h2>\n<p>Veri taban\u0131 se\u00e7imi, bir projenin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i teknoloji ortam\u0131nda, hem g\u00fcvenilir hem de y\u00fcksek performansl\u0131 bir \u00e7\u00f6z\u00fcm bulmak zorlay\u0131c\u0131 olabilir. \u0130\u015fte tam bu noktada, PostgreSQL ve Ubuntu 18.04 kombinasyonu devreye giriyor. PostgreSQL, uzun y\u0131llard\u0131r geli\u015ftirilen, topluluk destekli, a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemidir. G\u00fc\u00e7l\u00fc \u00f6zellikleri, ACID uyumlulu\u011fu (Atomicity, Consistency, Isolation, Durability) ve geni\u015f veri t\u00fcr\u00fc deste\u011fi sayesinde kurumsal d\u00fczeyde uygulamalardan k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projelere kadar geni\u015f bir yelpazede tercih edilmektedir. \u00d6zellikle karma\u015f\u0131k sorgular, y\u00fcksek e\u015fzamanl\u0131l\u0131k ve b\u00fcy\u00fck veri hacimleri ile ba\u015fa \u00e7\u0131kma konusunda \u00fcst\u00fcn yeteneklere sahiptir. Ayr\u0131ca, mekansal veriler (PostGIS), JSON\/JSONB ve XML gibi modern veri formatlar\u0131n\u0131 yerel olarak desteklemesi, onu g\u00fcn\u00fcm\u00fcz\u00fcn \u00e7ok y\u00f6nl\u00fc uygulamalar\u0131 i\u00e7in ideal bir se\u00e7enek haline getirir.<\/p>\n<p>Ubuntu 18.04 (Bionic Beaver) ise, uzun s\u00fcreli destek (LTS) sa\u011flayan, stabil ve yayg\u0131n olarak kullan\u0131lan bir Linux da\u011f\u0131t\u0131m\u0131d\u0131r. Sunucu ortamlar\u0131nda g\u00fcvenilirli\u011fi, kolay y\u00f6netilebilirli\u011fi ve geni\u015f paket deposu sayesinde geli\u015ftiriciler ve sistem y\u00f6neticileri aras\u0131nda olduk\u00e7a pop\u00fclerdir. PostgreSQL gibi kritik sistem bile\u015fenlerini Ubuntu \u00fczerine kurmak, genellikle sorunsuz bir deneyim sunar \u00e7\u00fcnk\u00fc Ubuntu&#8217;nun paket y\u00f6netim sistemi (APT) bu t\u00fcr yaz\u0131l\u0131mlar\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve g\u00fcncellemelerini kolayca y\u00f6netir. Bu ikilinin tercih edilmesi, sadece teknik avantajlar sunmakla kalmaz, ayn\u0131 zamanda maliyet etkinli\u011fi de sa\u011flar. A\u00e7\u0131k kaynak lisanslar\u0131 sayesinde hem PostgreSQL hem de Ubuntu i\u00e7in lisans maliyeti \u00f6demezsiniz, bu da b\u00fct\u00e7e k\u0131s\u0131tlamalar\u0131 olan projeler i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r. Ek olarak, geni\u015f ve aktif topluluklar\u0131 sayesinde kar\u015f\u0131la\u015fabilece\u011finiz sorunlara h\u0131zl\u0131ca \u00e7\u00f6z\u00fcm bulabilir, s\u00fcrekli geli\u015fen \u00f6zelliklerden faydalanabilirsiniz. K\u0131sacas\u0131, PostgreSQL&#8217;in veri b\u00fct\u00fcnl\u00fc\u011f\u00fc, geni\u015fleyebilirli\u011fi ve performans\u0131 ile Ubuntu&#8217;nun stabilitesi ve kullan\u0131m kolayl\u0131\u011f\u0131 birle\u015fti\u011finde, her t\u00fcrl\u00fc veri odakl\u0131 uygulama i\u00e7in sa\u011flam ve g\u00fcvenilir bir temel olu\u015fturmu\u015f olursunuz. Bu rehber boyunca, bu g\u00fc\u00e7l\u00fc ikiliyi en verimli \u015fekilde nas\u0131l kurup y\u00f6netece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.<\/p>\n<h2>PostgreSQL Nedir ve Neden Bu Kadar Pop\u00fclerdir?<\/h2>\n<p>PostgreSQL, genellikle &#8220;Postgres&#8221; olarak an\u0131lan, a\u00e7\u0131k kaynak kodlu, g\u00fc\u00e7l\u00fc, nesne-ili\u015fkisel bir veritaban\u0131 y\u00f6netim sistemidir (ORDBMS). \u0130li\u015fkisel veritabanlar\u0131n\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 ve g\u00fcvenilirli\u011fini, nesne tabanl\u0131 programlaman\u0131n esnekli\u011fiyle birle\u015ftirir. \u0130lk olarak 1986 y\u0131l\u0131nda Kaliforniya \u00dcniversitesi, Berkeley&#8217;de geli\u015ftirilen POSTGRES projesinden do\u011fmu\u015f olup, y\u0131llar i\u00e7inde d\u00fcnya \u00e7ap\u0131nda bir geli\u015ftirici toplulu\u011fu taraf\u0131ndan s\u00fcrekli olarak iyile\u015ftirilmi\u015f ve g\u00fcncellenmi\u015ftir. Bu uzun ve k\u00f6kl\u00fc ge\u00e7mi\u015f, PostgreSQL&#8217;in olgunlu\u011funu, stabilitesini ve g\u00fcvenilirli\u011fini kan\u0131tlar niteliktedir. Peki, piyasada bir\u00e7ok veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc varken PostgreSQL&#8217;i bu kadar pop\u00fcler yapan nedir?<\/p>\n<p>\u00d6ncelikle, PostgreSQL&#8217;in en \u00f6nemli \u00f6zelliklerinden biri <strong>ACID uyumlulu\u011fudur<\/strong>. Bu, veritaban\u0131 i\u015flemlerinin atomik (b\u00f6l\u00fcnemez), tutarl\u0131 (ge\u00e7erli bir durumdan di\u011ferine ge\u00e7er), izole (e\u015fzamanl\u0131 i\u015flemler birbirini etkilemez) ve dayan\u0131kl\u0131 (kal\u0131c\u0131 olarak kaydedilir) oldu\u011fu anlam\u0131na gelir. \u00d6zellikle finansal i\u015flemler, envanter y\u00f6netimi veya kritik i\u015f s\u00fcre\u00e7leri gibi veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn mutlak \u00f6neme sahip oldu\u011fu uygulamalar i\u00e7in bu \u00f6zellik hayati \u00f6neme sahiptir. Ayr\u0131ca, PostgreSQL&#8217;in <strong>geni\u015fletilebilirli\u011fi<\/strong> e\u015fsizdir. Kullan\u0131c\u0131lar kendi veri t\u00fcrlerini, fonksiyonlar\u0131n\u0131, operat\u00f6rlerini, agregalar\u0131n\u0131 ve indeks t\u00fcrlerini tan\u0131mlayabilirler. Bu esneklik, \u00f6zellikle co\u011frafi bilgi sistemleri (PostGIS), zaman serisi verileri veya di\u011fer \u00f6zel veri ihtiya\u00e7lar\u0131 olan uygulamalar i\u00e7in b\u00fcy\u00fck avantaj sa\u011flar. \u00d6rne\u011fin, PostGIS uzant\u0131s\u0131 ile PostgreSQL, mekansal verileri y\u00f6netme ve karma\u015f\u0131k co\u011frafi sorgular\u0131 \u00e7al\u0131\u015ft\u0131rma konusunda sekt\u00f6r lideri bir \u00e7\u00f6z\u00fcm haline gelmi\u015ftir.<\/p>\n<p>Di\u011fer bir pop\u00fclerlik nedeni ise <strong>a\u00e7\u0131k kaynak<\/strong> olmas\u0131d\u0131r. A\u00e7\u0131k kaynak kodlu olmas\u0131, herhangi bir lisans \u00fccreti \u00f6demeden kullan\u0131labilmesi, de\u011fi\u015ftirilebilmesi ve da\u011f\u0131t\u0131labilmesi anlam\u0131na gelir. Bu durum, hem startup&#8217;lar hem de b\u00fcy\u00fck \u00f6l\u00e7ekli i\u015fletmeler i\u00e7in maliyet avantaj\u0131 sa\u011flar. Ayr\u0131ca, geni\u015f ve aktif bir toplulu\u011fa sahip olmas\u0131, s\u00fcrekli hata d\u00fczeltmeleri, g\u00fcvenlik yamalar\u0131 ve yeni \u00f6zelliklerin eklenmesini garanti eder. Kar\u015f\u0131la\u015f\u0131lan sorunlar i\u00e7in h\u0131zl\u0131 destek bulmak da bu topluluk sayesinde m\u00fcmk\u00fcnd\u00fcr. PostgreSQL, <strong>e\u015fzamanl\u0131l\u0131k kontrol\u00fc<\/strong> konusunda da olduk\u00e7a geli\u015fmi\u015ftir. Multi-Version Concurrency Control (MVCC) mimarisi sayesinde, okuma i\u015flemleri yazma i\u015flemlerini engellemez ve tam tersi de ge\u00e7erlidir. Bu, y\u00fcksek trafikli uygulamalarda bile veritaban\u0131n\u0131n performans\u0131n\u0131 ve yan\u0131t verebilirli\u011fini korumas\u0131n\u0131 sa\u011flar. Son olarak, SQL standartlar\u0131na y\u00fcksek d\u00fczeyde uyum sa\u011flamas\u0131 ve JSON\/JSONB, XML gibi modern veri formatlar\u0131n\u0131 yerel olarak desteklemesi, onu hem geleneksel ili\u015fkisel veritaban\u0131 ihtiya\u00e7lar\u0131 hem de NoSQL benzeri esneklik arayan projeler i\u00e7in ideal bir hibrit \u00e7\u00f6z\u00fcm haline getirir. Bu \u00f6zelliklerin t\u00fcm\u00fc, PostgreSQL&#8217;i g\u00fcn\u00fcm\u00fcz\u00fcn en g\u00fcvenilir, esnek ve g\u00fc\u00e7l\u00fc veritaban\u0131 \u00e7\u00f6z\u00fcmlerinden biri yapmakta ve geni\u015f bir kullan\u0131c\u0131 kitlesi taraf\u0131ndan tercih edilmesini sa\u011flamaktad\u0131r.<\/p>\n<h2>Ubuntu 18.04 \u00dczerine PostgreSQL Kurulumu Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Ubuntu 18.04 sunucunuza PostgreSQL kurmak, do\u011fru ad\u0131mlar\u0131 izledi\u011finizde olduk\u00e7a basit bir i\u015flemdir. Bu b\u00f6l\u00fcmde, sisteminizi haz\u0131rlamaktan PostgreSQL paketlerini y\u00fcklemeye ve servisini y\u00f6netmeye kadar t\u00fcm ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Bu ad\u0131mlar, veritaban\u0131 sunucunuzun temelini sa\u011flam bir \u015fekilde atman\u0131z\u0131 sa\u011flayacak ve gelecekteki operasyonlar\u0131n\u0131z i\u00e7in sorunsuz bir ba\u015flang\u0131\u00e7 sunacakt\u0131r. Unutmay\u0131n, her ad\u0131m\u0131n do\u011fru ve eksiksiz bir \u015fekilde tamamlanmas\u0131, kurulumun ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Ba\u015flamadan \u00f6nce, bir terminal penceresi a\u00e7t\u0131\u011f\u0131n\u0131zdan ve root veya sudo yetkilerine sahip bir kullan\u0131c\u0131 olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h3>Sistem G\u00fcncellemesi ve \u00d6n Gereksinimler Nelerdir?<\/h3>\n<p>Herhangi bir yaz\u0131l\u0131m kurulumuna ba\u015flamadan \u00f6nce, i\u015fletim sisteminizin g\u00fcncel oldu\u011fundan emin olmak her zaman en iyi uygulamad\u0131r. Bu, hem g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapat\u0131lmas\u0131na yard\u0131mc\u0131 olur hem de yeni kurulacak yaz\u0131l\u0131mlar\u0131n mevcut sistem paketleriyle uyumlulu\u011funu sa\u011flar. Ubuntu&#8217;da bu i\u015flemi yapmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz. \u0130lk komut, yerel paket indeksinizi g\u00fcncellerken, ikinci komut mevcut t\u00fcm paketlerin en son s\u00fcr\u00fcmlerine y\u00fckseltilmesini sa\u011flar. Bu ad\u0131m\u0131 atlamak, kurulum s\u0131ras\u0131nda beklenmedik ba\u011f\u0131ml\u0131l\u0131k hatalar\u0131na veya g\u00fcvenlik risklerine yol a\u00e7abilir.<\/p>\n<pre><code>\nsudo apt update\nsudo apt upgrade -y\n    <\/code><\/pre>\n<p>Bu komutlar tamamland\u0131ktan sonra, sisteminiz PostgreSQL kurulumu i\u00e7in haz\u0131r hale gelmi\u015f demektir. <code class=\"language-\">-y<\/code> bayra\u011f\u0131, t\u00fcm sorulara otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 verilmesini sa\u011flar, b\u00f6ylece y\u00fckseltme i\u015flemi kesintisiz devam eder. Bu ad\u0131mlar\u0131n tamamlanmas\u0131, yaln\u0131zca PostgreSQL i\u00e7in de\u011fil, sunucunuzda \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z di\u011fer t\u00fcm uygulamalar i\u00e7in de sa\u011fl\u0131kl\u0131 bir temel olu\u015fturur. Ayr\u0131ca, bu a\u015famada sistem kaynaklar\u0131n\u0131z\u0131n (CPU, RAM, disk alan\u0131) yeterli oldu\u011fundan emin olmak da \u00f6nemlidir. PostgreSQL, \u00f6zellikle b\u00fcy\u00fck veritabanlar\u0131 veya yo\u011fun sorgu y\u00fckleri alt\u0131nda \u00e7al\u0131\u015f\u0131rken belirli miktarda kaynak t\u00fcketebilir. Genellikle, ba\u015flang\u0131\u00e7 i\u00e7in 2GB RAM ve 20GB disk alan\u0131 \u00e7o\u011fu k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulama i\u00e7in yeterli olacakt\u0131r. Ancak projenizin gereksinimlerine g\u00f6re bu de\u011ferleri art\u0131rman\u0131z gerekebilir.<\/p>\n<h3>PostgreSQL Paketlerini Y\u00fckleme Ad\u0131mlar\u0131<\/h3>\n<p>Sisteminiz g\u00fcncellendikten sonra, PostgreSQL&#8217;i y\u00fcklemeye haz\u0131rs\u0131n\u0131z. Ubuntu&#8217;nun varsay\u0131lan depolar\u0131nda PostgreSQL&#8217;in kararl\u0131 s\u00fcr\u00fcmleri bulunur ve <code class=\"language-\">apt<\/code> paket y\u00f6neticisi arac\u0131l\u0131\u011f\u0131yla kolayca y\u00fcklenebilir. A\u015fa\u011f\u0131daki komut, PostgreSQL sunucusunu ve gerekli istemci ara\u00e7lar\u0131n\u0131 (\u00f6rne\u011fin <code class=\"language-\">psql<\/code>) sisteminize kuracakt\u0131r. Bu komut, PostgreSQL&#8217;in varsay\u0131lan s\u00fcr\u00fcm\u00fcn\u00fc (Ubuntu 18.04 i\u00e7in genellikle PostgreSQL 10) kuracakt\u0131r. E\u011fer belirli bir PostgreSQL s\u00fcr\u00fcm\u00fcn\u00fc kurmak istiyorsan\u0131z, PostgreSQL APT deposunu eklemeniz gerekebilir; ancak bu rehberde varsay\u0131lan kurulumu ele alaca\u011f\u0131z.<\/p>\n<pre><code>\nsudo apt install postgresql postgresql-contrib -y\n    <\/code><\/pre>\n<p>Burada <code class=\"language-\">postgresql<\/code> paketi ana veritaban\u0131 sunucusunu i\u00e7erirken, <code class=\"language-\">postgresql-contrib<\/code> paketi ise \u00e7e\u015fitli ek mod\u00fclleri ve yard\u0131mc\u0131 programlar\u0131 bar\u0131nd\u0131r\u0131r. Bu ek mod\u00fcller, PostGIS gibi co\u011frafi veri uzant\u0131lar\u0131ndan, performans analiz ara\u00e7lar\u0131na kadar bir\u00e7ok faydal\u0131 arac\u0131 i\u00e7erir ve genellikle \u00e7o\u011fu kurulumda tavsiye edilir. Kurulum i\u015flemi, ba\u011f\u0131ml\u0131l\u0131klar\u0131 otomatik olarak \u00e7\u00f6zecek ve gerekli t\u00fcm dosyalar\u0131 indirip yap\u0131land\u0131racakt\u0131r. Bu s\u00fcre\u00e7 birka\u00e7 dakika s\u00fcrebilir, internet ba\u011flant\u0131n\u0131z\u0131n h\u0131z\u0131na ba\u011fl\u0131 olarak de\u011fi\u015fiklik g\u00f6sterebilir. Kurulum tamamland\u0131\u011f\u0131nda, PostgreSQL servisi otomatik olarak ba\u015flat\u0131lacak ve sistem a\u00e7\u0131l\u0131\u015f\u0131nda da otomatik olarak ba\u015flamak \u00fczere yap\u0131land\u0131r\u0131lacakt\u0131r. Bu, sunucunuz yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda veritaban\u0131n\u0131z\u0131n da otomatik olarak eri\u015filebilir olaca\u011f\u0131 anlam\u0131na gelir, bu da operasyonel kolayl\u0131k sa\u011flar. Bu ad\u0131m, PostgreSQL&#8217;in \u00e7ekirdek bile\u015fenlerini ve temel ara\u00e7 setini sisteminize entegre etmenin anahtar\u0131d\u0131r. Ba\u015far\u0131l\u0131 bir kurulumun ard\u0131ndan, veritaban\u0131 sunucunuz art\u0131k \u00e7al\u0131\u015fmaya haz\u0131r olacakt\u0131r.<\/p>\n<h3>PostgreSQL Servisini Y\u00f6netme ve Durumunu Kontrol Etme<\/h3>\n<p>PostgreSQL kurulumu tamamland\u0131\u011f\u0131nda, servis otomatik olarak ba\u015flat\u0131l\u0131r. Ancak, veritaban\u0131 sunucusunun durumunu kontrol etmek veya gerekti\u011finde manuel olarak durdurmak, ba\u015flatmak veya yeniden ba\u015flatmak isteyebilirsiniz. Bu t\u00fcr servis y\u00f6netimi i\u015flemleri i\u00e7in <code class=\"language-\">systemctl<\/code> komutunu kullan\u0131r\u0131z. <code class=\"language-\">systemctl<\/code>, Linux&#8217;ta sistem ve servis y\u00f6neticisi olan <code class=\"language-\">systemd<\/code> ile etkile\u015fim kurmak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Servisin durumunu kontrol etmek, herhangi bir sorun olup olmad\u0131\u011f\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir. A\u015fa\u011f\u0131daki komut, PostgreSQL servisinin aktif olup olmad\u0131\u011f\u0131n\u0131, herhangi bir hata mesaj\u0131 olup olmad\u0131\u011f\u0131n\u0131 ve son log kay\u0131tlar\u0131n\u0131 g\u00f6sterir:<\/p>\n<pre><code>\nsudo systemctl status postgresql\n    <\/code><\/pre>\n<p>Bu komutun \u00e7\u0131kt\u0131s\u0131nda <code class=\"language-\">Active: active (exited)<\/code> veya <code class=\"language-\">Active: active (running)<\/code> gibi bir ifade g\u00f6rmelisiniz. <code class=\"language-\">active (running)<\/code> ifadesi, servisin sorunsuz bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir. E\u011fer servis \u00e7al\u0131\u015fm\u0131yorsa veya bir hata durumu varsa, \u00e7\u0131kt\u0131 size sorunun ne olabilece\u011fi hakk\u0131nda ipu\u00e7lar\u0131 verecektir. Servisi durdurmak, ba\u015flatmak veya yeniden ba\u015flatmak i\u00e7in ise a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<ul>\n<li><strong>Servisi Durdurma:<\/strong>\n<pre><code>\nsudo systemctl stop postgresql\n            <\/code><\/pre>\n<p>Bu komut, PostgreSQL sunucusunu tamamen durdurur. Veritaban\u0131na hi\u00e7bir ba\u011flant\u0131 kabul edilmeyecektir.<\/p>\n<\/li>\n<li><strong>Servisi Ba\u015flatma:<\/strong>\n<pre><code>\nsudo systemctl start postgresql\n            <\/code><\/pre>\n<p>Durdurulmu\u015f bir PostgreSQL servisini yeniden ba\u015flatmak i\u00e7in bu komutu kullan\u0131n.<\/p>\n<\/li>\n<li><strong>Servisi Yeniden Ba\u015flatma:<\/strong>\n<pre><code>\nsudo systemctl restart postgresql\n            <\/code><\/pre>\n<p>Yap\u0131land\u0131rma de\u011fi\u015fiklikleri yapt\u0131ktan sonra servisi yeniden ba\u015flatmak genellikle gereklidir. Bu komut, servisi durdurup tekrar ba\u015flat\u0131r.<\/p>\n<\/li>\n<li><strong>Sistem A\u00e7\u0131l\u0131\u015f\u0131nda Otomatik Ba\u015flamay\u0131 Etkinle\u015ftirme\/Devre D\u0131\u015f\u0131 B\u0131rakma:<\/strong>\n<pre><code>\nsudo systemctl enable postgresql\nsudo systemctl disable postgresql\n            <\/code><\/pre>\n<p><code class=\"language-\">enable<\/code> komutu, PostgreSQL&#8217;in sistem her ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flar. <code class=\"language-\">disable<\/code> ise bu \u00f6zelli\u011fi kapat\u0131r. Varsay\u0131lan olarak, kurulumdan sonra <code class=\"language-\">enable<\/code> durumu aktiftir.<\/p>\n<\/li>\n<\/ul>\n<p>Bu komutlar, PostgreSQL sunucunuzun ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmenize olanak tan\u0131r. \u00d6zellikle yap\u0131land\u0131rma dosyalar\u0131nda de\u011fi\u015fiklikler yapt\u0131\u011f\u0131n\u0131zda (<code class=\"language-\">postgresql.conf<\/code> veya <code class=\"language-\">pg_hba.conf<\/code> gibi), bu de\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in servisi yeniden ba\u015flatman\u0131z gerekecektir. Servis y\u00f6netimi becerileri, veritaban\u0131 y\u00f6neticisi olarak g\u00fcnl\u00fck operasyonlar\u0131n\u0131zda size b\u00fcy\u00fck kolayl\u0131k sa\u011flayacakt\u0131r.<\/p>\n<div class=\"tip-box\">\n<p> Uzman \u0130pucu: Herhangi bir servis y\u00f6netim komutu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, mevcut ba\u011flant\u0131lar\u0131n ve i\u015flemlerin durumunu kontrol etmek olas\u0131 veri kayb\u0131n\u0131 veya kesintileri \u00f6nleyebilir. \u00d6zellikle \u00fcretim ortamlar\u0131nda, planl\u0131 bak\u0131m pencerelerinde bu i\u015flemleri yapmak en iyisidir.<\/p>\n<\/p><\/div>\n<h2>PostgreSQL Kullan\u0131c\u0131 ve Veritaban\u0131 Y\u00f6netimi<\/h2>\n<p>PostgreSQL&#8217;i kurduktan sonra, ilk yapman\u0131z gereken \u015feylerden biri, veritaban\u0131 sunucusu ile etkile\u015fim kuracak kullan\u0131c\u0131lar ve bu kullan\u0131c\u0131lar\u0131n eri\u015fece\u011fi veritabanlar\u0131 olu\u015fturmakt\u0131r. PostgreSQL, varsay\u0131lan olarak <code class=\"language-\">postgres<\/code> ad\u0131nda bir s\u00fcper kullan\u0131c\u0131 hesab\u0131 olu\u015fturur. Bu hesap, sistemin root kullan\u0131c\u0131s\u0131na benzer \u015fekilde veritaban\u0131 sunucusu \u00fczerinde tam yetkiye sahiptir. G\u00fcvenlik nedenleriyle, genellikle bu <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131 yerine projeniz veya uygulaman\u0131z i\u00e7in \u00f6zel, daha az yetkili kullan\u0131c\u0131lar ve veritabanlar\u0131 olu\u015fturmak en iyi uygulamad\u0131r. Bu b\u00f6l\u00fcm, yeni bir PostgreSQL kullan\u0131c\u0131s\u0131 olu\u015fturmaktan, bir veritaban\u0131 yaratmaya ve <code class=\"language-\">psql<\/code> istemcisi ile ba\u011flant\u0131 kurmaya kadar temel y\u00f6netim ad\u0131mlar\u0131n\u0131 kapsayacakt\u0131r. Bu ad\u0131mlar, veritaban\u0131 ortam\u0131n\u0131z\u0131n g\u00fcvenli\u011fini ve organizasyonunu sa\u011flamak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h3>Yeni Bir PostgreSQL Kullan\u0131c\u0131s\u0131 Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Varsay\u0131lan <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131, i\u015fletim sistemindeki <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131 ile ili\u015fkilidir. Bu nedenle, <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131 olarak PostgreSQL istemcisine ba\u011flanmak i\u00e7in, \u00f6nce i\u015fletim sisteminde <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7i\u015f yapman\u0131z gerekir. Bunu a\u015fa\u011f\u0131daki komutla yapabilirsiniz:<\/p>\n<pre><code>\nsudo -i -u postgres\n    <\/code><\/pre>\n<p>Bu komut sizi <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131n\u0131n shell&#8217;ine atacakt\u0131r. Art\u0131k <code class=\"language-\">psql<\/code> komutunu kullanarak PostgreSQL komut sat\u0131r\u0131 istemcisine ba\u011flanabilirsiniz:<\/p>\n<pre><code>\npsql\n    <\/code><\/pre>\n<p><code class=\"language-\">psql<\/code> istemcisindeyken, yeni bir veritaban\u0131 kullan\u0131c\u0131s\u0131 olu\u015fturabilirsiniz. G\u00fcvenlik i\u00e7in, her uygulama veya proje i\u00e7in ayr\u0131 bir veritaban\u0131 kullan\u0131c\u0131s\u0131 olu\u015fturmak iyi bir uygulamad\u0131r. \u00d6rne\u011fin, <code class=\"language-\">myuser<\/code> ad\u0131nda bir kullan\u0131c\u0131 olu\u015ftural\u0131m ve ona bir \u015fifre atayal\u0131m:<\/p>\n<pre><code>\nCREATE USER myuser WITH PASSWORD 'gucluvegizlisifre';\n    <\/code><\/pre>\n<p>\u015eifrenizi g\u00fcvenli ve karma\u015f\u0131k bir \u015fekilde se\u00e7ti\u011finizden emin olun. Kullan\u0131c\u0131 olu\u015fturulduktan sonra, <code class=\"language-\">\\du<\/code> komutunu kullanarak mevcut kullan\u0131c\u0131lar\u0131 listeleyebilir ve yeni kullan\u0131c\u0131n\u0131z\u0131n ba\u015far\u0131yla olu\u015fturuldu\u011funu do\u011frulayabilirsiniz. <code class=\"language-\">psql<\/code>&#8216;den \u00e7\u0131kmak i\u00e7in <code class=\"language-\">\\q<\/code> yaz\u0131p Enter tu\u015funa basman\u0131z yeterlidir. Daha sonra, i\u015fletim sistemi <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131ndan \u00e7\u0131kmak i\u00e7in <code class=\"language-\">exit<\/code> yaz\u0131p Enter tu\u015funa basarak kendi kullan\u0131c\u0131 hesab\u0131n\u0131za geri d\u00f6nebilirsiniz. Bu ad\u0131mlar, veritaban\u0131 eri\u015fimini daha gran\u00fcler bir \u015fekilde y\u00f6netmenizi ve olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 minimize etmenizi sa\u011flar. Her bir uygulaman\u0131n kendi \u00f6zel veritaban\u0131 kullan\u0131c\u0131s\u0131na sahip olmas\u0131, yetkisiz eri\u015fim durumunda potansiyel zarar\u0131 s\u0131n\u0131rlamaya yard\u0131mc\u0131 olur.<\/p>\n<h3>Yeni Bir Veritaban\u0131 Nas\u0131l Olu\u015fturulur ve Yetkilendirilir?<\/h3>\n<p>Bir kullan\u0131c\u0131 olu\u015fturduktan sonra, bu kullan\u0131c\u0131n\u0131n \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131 bir veritaban\u0131 olu\u015fturman\u0131z gerekir. Yine <code class=\"language-\">postgres<\/code> kullan\u0131c\u0131s\u0131 olarak <code class=\"language-\">psql<\/code>&#8216;e ba\u011flanarak bu i\u015flemi ger\u00e7ekle\u015ftirebilirsiniz. <code class=\"language-\">my_database<\/code> ad\u0131nda yeni bir veritaban\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\nsudo -i -u postgres\npsql\n    <\/code><\/pre>\n<p><code class=\"language-\">psql<\/code> istemcisindeyken:<\/p>\n<pre><code>\nCREATE DATABASE my_database;\n    <\/code><\/pre>\n<p>Veritaban\u0131 olu\u015fturulduktan sonra, bu veritaban\u0131na daha \u00f6nce olu\u015fturdu\u011fumuz <code class=\"language-\">myuser<\/code> kullan\u0131c\u0131s\u0131na yetki vermemiz gerekir. Bu, <code class=\"language-\">myuser<\/code>&#8216;\u0131n <code class=\"language-\">my_database<\/code> \u00fczerinde okuma, yazma ve di\u011fer gerekli i\u015flemleri yapabilmesini sa\u011flar:<\/p>\n<pre><code>\nGRANT ALL PRIVILEGES ON DATABASE my_database TO myuser;\n    <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">myuser<\/code>&#8216;a <code class=\"language-\">my_database<\/code> \u00fczerindeki t\u00fcm yetkileri verir. Daha k\u0131s\u0131tl\u0131 yetkiler vermek isterseniz, <code class=\"language-\">ALL PRIVILEGES<\/code> yerine <code class=\"language-\">SELECT<\/code>, <code class=\"language-\">INSERT<\/code>, <code class=\"language-\">UPDATE<\/code>, <code class=\"language-\">DELETE<\/code> gibi belirli yetkileri belirtebilirsiniz. \u00d6rne\u011fin, sadece okuma yetkisi vermek i\u00e7in <code class=\"language-\">GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;<\/code> gibi daha spesifik komutlar kullan\u0131labilir. Yetkilendirme i\u015flemi tamamland\u0131ktan sonra, <code class=\"language-\">\\l<\/code> komutunu kullanarak mevcut veritabanlar\u0131n\u0131 listeleyebilir ve <code class=\"language-\">my_database<\/code>&#8216;in ba\u015far\u0131yla olu\u015fturuldu\u011funu ve yetkilendirildi\u011fini do\u011frulayabilirsiniz. <code class=\"language-\">psql<\/code>&#8216;den \u00e7\u0131kmak i\u00e7in <code class=\"language-\">\\q<\/code> ve ard\u0131ndan <code class=\"language-\">exit<\/code> komutlar\u0131n\u0131 kullanmay\u0131 unutmay\u0131n. Bu ad\u0131mlarla, uygulaman\u0131z i\u00e7in g\u00fcvenli ve izole bir veritaban\u0131 ortam\u0131 haz\u0131rlam\u0131\u015f olursunuz. Her uygulaman\u0131n kendi veritaban\u0131na ve kullan\u0131c\u0131s\u0131na sahip olmas\u0131, veritaban\u0131 y\u00f6netimini kolayla\u015ft\u0131r\u0131r ve olas\u0131 hatalar\u0131n veya g\u00fcvenlik ihlallerinin etkisini s\u0131n\u0131rlar.<\/p>\n<h3>psql \u0130stemcisi ile Veritaban\u0131na Ba\u011flanma<\/h3>\n<p>PostgreSQL ile etkile\u015fime ge\u00e7menin en yayg\u0131n yollar\u0131ndan biri, <code class=\"language-\">psql<\/code> komut sat\u0131r\u0131 istemcisini kullanmakt\u0131r. Bu ara\u00e7, SQL sorgular\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131za, veritaban\u0131 nesnelerini y\u00f6netmenize ve sunucu hakk\u0131nda bilgi alman\u0131za olanak tan\u0131r. Daha \u00f6nce olu\u015fturdu\u011fumuz <code class=\"language-\">myuser<\/code> kullan\u0131c\u0131s\u0131 ve <code class=\"language-\">my_database<\/code> veritaban\u0131 ile ba\u011flant\u0131 kurmay\u0131 deneyelim. Kendi kullan\u0131c\u0131 hesab\u0131n\u0131zdan (root olmayan) a\u015fa\u011f\u0131daki komutu kullanarak ba\u011flanabilirsiniz:<\/p>\n<pre><code>\npsql -U myuser -d my_database -h localhost -p 5432\n    <\/code><\/pre>\n<ul>\n<li><code class=\"language-\">-U myuser<\/code>: Ba\u011flanmak istedi\u011finiz kullan\u0131c\u0131 ad\u0131n\u0131 belirtir (<code class=\"language-\">myuser<\/code>).<\/li>\n<li><code class=\"language-\">-d my_database<\/code>: Ba\u011flanmak istedi\u011finiz veritaban\u0131 ad\u0131n\u0131 belirtir (<code class=\"language-\">my_database<\/code>).<\/li>\n<li><code class=\"language-\">-h localhost<\/code>: Veritaban\u0131 sunucusunun ana bilgisayar\u0131n\u0131 belirtir. Yerel sunucu i\u00e7in <code class=\"language-\">localhost<\/code> kullan\u0131l\u0131r.<\/li>\n<li><code class=\"language-\">-p 5432<\/code>: PostgreSQL&#8217;in varsay\u0131lan ba\u011flant\u0131 noktas\u0131 olan 5432&#8217;yi belirtir.<\/li>\n<\/ul>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, sizden <code class=\"language-\">myuser<\/code> i\u00e7in belirledi\u011finiz \u015fifreyi girmeniz istenecektir. \u015eifreyi do\u011fru girdikten sonra, <code class=\"language-\">psql<\/code> istemcisine ba\u015far\u0131yla ba\u011flanacak ve <code class=\"language-\">my_database<\/code> ortam\u0131nda SQL komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmaya haz\u0131r olacaks\u0131n\u0131z. Ba\u011fland\u0131ktan sonra, komut isteminiz <code class=\"language-\">my_database=><\/code> veya benzer bir ifadeye d\u00f6n\u00fc\u015fecektir. Bu, hangi veritaban\u0131na ba\u011fl\u0131 oldu\u011funuzu g\u00f6sterir. <code class=\"language-\">psql<\/code> i\u00e7inde \u00e7e\u015fitli meta komutlar (ters e\u011fik \u00e7izgi ile ba\u015flayan komutlar) bulunur. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><code class=\"language-\">\\l<\/code>: T\u00fcm veritabanlar\u0131n\u0131 listeler.<\/li>\n<li><code class=\"language-\">\\dt<\/code>: Mevcut veritaban\u0131ndaki tablolar\u0131 listeler.<\/li>\n<li><code class=\"language-\">\\du<\/code>: T\u00fcm kullan\u0131c\u0131lar\u0131 listeler.<\/li>\n<li><code class=\"language-\">\\conninfo<\/code>: Mevcut ba\u011flant\u0131 hakk\u0131nda bilgi verir.<\/li>\n<li><code class=\"language-\">\\q<\/code>: <code class=\"language-\">psql<\/code> istemcisinden \u00e7\u0131kar.<\/li>\n<\/ul>\n<p>Bu komutlar, veritaban\u0131 \u00fczerinde h\u0131zl\u0131ca bilgi alman\u0131za ve y\u00f6netim g\u00f6revlerini yerine getirmenize yard\u0131mc\u0131 olur. <code class=\"language-\">psql<\/code>, g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve SQL sorgular\u0131n\u0131z\u0131 test etmek, veri manip\u00fclasyonu yapmak ve veritaban\u0131 \u015femas\u0131n\u0131 incelemek i\u00e7in vazge\u00e7ilmezdir. Ba\u011flant\u0131 sorunlar\u0131 ya\u015f\u0131yorsan\u0131z, <code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131n\u0131 kontrol etmeniz gerekebilir. Bu dosya, hangi kullan\u0131c\u0131lar\u0131n hangi veritabanlar\u0131na hangi IP adreslerinden ve hangi kimlik do\u011frulama y\u00f6ntemiyle ba\u011flanabilece\u011fini belirler. Varsay\u0131lan olarak, yerel ba\u011flant\u0131lar genellikle <code class=\"language-\">peer<\/code> veya <code class=\"language-\">md5<\/code> kimlik do\u011frulamas\u0131 ile yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r. Uzaktan ba\u011flant\u0131lar i\u00e7in bu dosyan\u0131n d\u00fczenlenmesi gerekecektir, ancak bu konuyu ilerleyen b\u00f6l\u00fcmlerde ele alaca\u011f\u0131z.<\/p>\n<h2>Temel SQL Komutlar\u0131 ve Veri Manip\u00fclasyonu Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>PostgreSQL&#8217;e ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011fland\u0131ktan sonra, veritaban\u0131 ile etkile\u015fim kurman\u0131n ve veri y\u00f6netimi yapman\u0131n zaman\u0131 geldi. Bu b\u00f6l\u00fcm, SQL&#8217;in temelini olu\u015fturan tablo olu\u015fturma, veri ekleme, sorgulama, g\u00fcncelleme ve silme komutlar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Ayr\u0131ca, bu komutlar\u0131n ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131labilece\u011fini g\u00f6steren basit bir vaka analizi de sunaca\u011f\u0131z. SQL (Structured Query Language), ili\u015fkisel veritabanlar\u0131yla ileti\u015fim kurmak i\u00e7in kullan\u0131lan standart bir dildir ve PostgreSQL de bu standarda s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131d\u0131r. Bu temel komutlar\u0131 anlamak, veritaban\u0131 y\u00f6netimi ve uygulama geli\u015ftirme s\u00fcre\u00e7lerinizde size b\u00fcy\u00fck bir avantaj sa\u011flayacakt\u0131r. Her komutu dikkatlice inceleyerek ve uygulayarak, veri manip\u00fclasyonu konusunda sa\u011flam bir temel olu\u015fturabilirsiniz.<\/p>\n<h3>Tablo Olu\u015fturma ve Veri Ekleme<\/h3>\n<p>Veritaban\u0131nda veri depolaman\u0131n ilk ad\u0131m\u0131, tablolar olu\u015fturmakt\u0131r. Tablolar, belirli bir yap\u0131ya sahip verileri sat\u0131rlar ve s\u00fctunlar halinde d\u00fczenler. Her s\u00fctun belirli bir veri t\u00fcr\u00fcn\u00fc (\u00f6rne\u011fin, tam say\u0131, metin, tarih) temsil eder. <code class=\"language-\">psql<\/code> istemcisine <code class=\"language-\">myuser<\/code> ve <code class=\"language-\">my_database<\/code> ile ba\u011fland\u0131ktan sonra, bir <code class=\"language-\">products<\/code> tablosu olu\u015ftural\u0131m:<\/p>\n<pre><code>\nCREATE TABLE products (\n    product_id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    description TEXT,\n    price DECIMAL(10, 2) NOT NULL,\n    stock_quantity INT NOT NULL DEFAULT 0,\n    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP\n);\n    <\/code><\/pre>\n<p>Bu komutta:<\/p>\n<ul>\n<li><code class=\"language-\">SERIAL PRIMARY KEY<\/code>: <code class=\"language-\">product_id<\/code> s\u00fctununun otomatik artan bir tam say\u0131 oldu\u011funu ve tablonun birincil anahtar\u0131 oldu\u011funu belirtir.<\/li>\n<li><code class=\"language-\">VARCHAR(100) NOT NULL<\/code>: <code class=\"language-\">name<\/code> s\u00fctununun en fazla 100 karakter uzunlu\u011funda metin oldu\u011funu ve bo\u015f b\u0131rak\u0131lamayaca\u011f\u0131n\u0131 (NOT NULL) belirtir.<\/li>\n<li><code class=\"language-\">TEXT<\/code>: <code class=\"language-\">description<\/code> s\u00fctununun uzun metinleri depolayabilece\u011fini belirtir.<\/li>\n<li><code class=\"language-\">DECIMAL(10, 2) NOT NULL<\/code>: <code class=\"language-\">price<\/code> s\u00fctununun ondal\u0131k bir say\u0131 oldu\u011funu (toplam 10 basamak, ondal\u0131k noktas\u0131ndan sonra 2 basamak) ve bo\u015f b\u0131rak\u0131lamayaca\u011f\u0131n\u0131 belirtir.<\/li>\n<li><code class=\"language-\">INT NOT NULL DEFAULT 0<\/code>: <code class=\"language-\">stock_quantity<\/code> s\u00fctununun tam say\u0131 oldu\u011funu, bo\u015f b\u0131rak\u0131lamayaca\u011f\u0131n\u0131 ve varsay\u0131lan de\u011ferinin 0 oldu\u011funu belirtir.<\/li>\n<li><code class=\"language-\">TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP<\/code>: <code class=\"language-\">created_at<\/code> s\u00fctununun zaman damgas\u0131 oldu\u011funu, zaman dilimi bilgisi i\u00e7erdi\u011fini ve varsay\u0131lan de\u011ferinin kayd\u0131n olu\u015fturuldu\u011fu anki zaman oldu\u011funu belirtir.<\/li>\n<\/ul>\n<p>Tablo olu\u015fturulduktan sonra, bu tabloya veri ekleyebiliriz. <code class=\"language-\">INSERT INTO<\/code> komutu, bir tabloya yeni sat\u0131rlar eklemek i\u00e7in kullan\u0131l\u0131r:<\/p>\n<pre><code>\nINSERT INTO products (name, description, price, stock_quantity) VALUES\n('Laptop', 'G\u00fc\u00e7l\u00fc bir diz\u00fcst\u00fc bilgisayar', 1200.00, 50),\n('Ak\u0131ll\u0131 Telefon', 'Y\u00fcksek performansl\u0131 ak\u0131ll\u0131 telefon', 800.00, 150),\n('Kablosuz Kulakl\u0131k', 'G\u00fcr\u00fclt\u00fc engellemeli kablosuz kulakl\u0131k', 150.00, 200);\n    <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">products<\/code> tablosuna \u00fc\u00e7 yeni \u00fcr\u00fcn kayd\u0131 ekler. <code class=\"language-\">product_id<\/code> ve <code class=\"language-\">created_at<\/code> s\u00fctunlar\u0131, tan\u0131mlad\u0131\u011f\u0131m\u0131z <code class=\"language-\">SERIAL<\/code> ve <code class=\"language-\">DEFAULT CURRENT_TIMESTAMP<\/code> \u00f6zellikleri sayesinde otomatik olarak doldurulacakt\u0131r. Veri ekleme i\u015flemi, uygulaman\u0131z\u0131n temel i\u015flevselli\u011finin \u00f6nemli bir par\u00e7as\u0131d\u0131r ve do\u011fru veri t\u00fcrleri ile k\u0131s\u0131tlamalar\u0131 belirlemek, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak i\u00e7in hayati \u00f6neme sahiptir. Bu ad\u0131mlar, veritaban\u0131n\u0131zda anlaml\u0131 bilgileri depolamaya ba\u015flaman\u0131z i\u00e7in gereken temel yap\u0131 ta\u015flar\u0131n\u0131 olu\u015fturur.<\/p>\n<h3>Veri Sorgulama, G\u00fcncelleme ve Silme<\/h3>\n<p>Veritaban\u0131na veri ekledikten sonra, bu verilere eri\u015fmek, onlar\u0131 de\u011fi\u015ftirmek veya silmek isteyeceksiniz. SQL&#8217;in en temel ve en s\u0131k kullan\u0131lan komutlar\u0131 bu i\u015flemleri yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Veri Sorgulama (SELECT)<\/h4>\n<p>Veritaban\u0131ndan veri almak i\u00e7in <code class=\"language-\">SELECT<\/code> komutunu kullan\u0131r\u0131z. Bu komut, belirli ko\u015fullara uyan sat\u0131rlar\u0131 veya s\u00fctunlar\u0131 se\u00e7menize olanak tan\u0131r.<\/p>\n<ul>\n<li><strong>T\u00fcm \u00fcr\u00fcnleri listeleme:<\/strong>\n<pre><code>\nSELECT * FROM products;\n            <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">products<\/code> tablosundaki t\u00fcm s\u00fctunlar\u0131 ve t\u00fcm sat\u0131rlar\u0131 getirir.<\/p>\n<\/li>\n<li><strong>Belirli s\u00fctunlar\u0131 se\u00e7me:<\/strong>\n<pre><code>\nSELECT name, price FROM products;\n            <\/code><\/pre>\n<p>Sadece \u00fcr\u00fcn ad\u0131n\u0131 ve fiyat\u0131n\u0131 listeler.<\/p>\n<\/li>\n<li><strong>Ko\u015fullu sorgulama (WHERE):<\/strong>\n<pre><code>\nSELECT * FROM products WHERE price > 500;\n            <\/code><\/pre>\n<p>Fiyat\u0131 500&#8217;den y\u00fcksek olan t\u00fcm \u00fcr\u00fcnleri getirir.<\/p>\n<\/li>\n<li><strong>S\u0131ralama (ORDER BY):<\/strong>\n<pre><code>\nSELECT name, price FROM products ORDER BY price DESC;\n            <\/code><\/pre>\n<p>\u00dcr\u00fcnleri fiyata g\u00f6re azalan s\u0131rada listeler.<\/p>\n<\/li>\n<\/ul>\n<h4>Veri G\u00fcncelleme (UPDATE)<\/h4>\n<p>Mevcut bir kayd\u0131n verilerini de\u011fi\u015ftirmek i\u00e7in <code class=\"language-\">UPDATE<\/code> komutunu kullan\u0131r\u0131z. <code class=\"language-\">WHERE<\/code> ko\u015fulu olmadan <code class=\"language-\">UPDATE<\/code> kullanmak, tablodaki t\u00fcm kay\u0131tlar\u0131 etkileyece\u011finden dikkatli olunmal\u0131d\u0131r.<\/p>\n<pre><code>\nUPDATE products SET price = 1150.00 WHERE name = 'Laptop';\n    <\/code><\/pre>\n<p>Bu komut, ad\u0131 &#8216;Laptop&#8217; olan \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 1150.00 olarak g\u00fcnceller.<\/p>\n<pre><code>\nUPDATE products SET stock_quantity = stock_quantity + 20 WHERE product_id = 2;\n    <\/code><\/pre>\n<p>ID&#8217;si 2 olan \u00fcr\u00fcn\u00fcn stok miktar\u0131n\u0131 20 art\u0131r\u0131r.<\/p>\n<h4>Veri Silme (DELETE)<\/h4>\n<p>Veritaban\u0131ndan kay\u0131tlar\u0131 silmek i\u00e7in <code class=\"language-\">DELETE FROM<\/code> komutunu kullan\u0131r\u0131z. <code class=\"language-\">UPDATE<\/code> gibi, <code class=\"language-\">DELETE<\/code> komutunu da <code class=\"language-\">WHERE<\/code> ko\u015fulu olmadan kullan\u0131rsan\u0131z tablodaki t\u00fcm kay\u0131tlar\u0131 siler, bu nedenle \u00e7ok dikkatli olunmal\u0131d\u0131r.<\/p>\n<pre><code>\nDELETE FROM products WHERE stock_quantity < 100;\n    <\/code><\/pre>\n<p>Stok miktar\u0131 100'den az olan t\u00fcm \u00fcr\u00fcnleri siler.<\/p>\n<pre><code>\nDELETE FROM products WHERE name = 'Kablosuz Kulakl\u0131k';\n    <\/code><\/pre>\n<p>Ad\u0131 'Kablosuz Kulakl\u0131k' olan \u00fcr\u00fcn\u00fc siler.<\/p>\n<div class=\"tip-box\">\n<p> Uzman \u0130pucu: \u00dcretim ortamlar\u0131nda <code class=\"language-\">UPDATE<\/code> ve <code class=\"language-\">DELETE<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce her zaman <code class=\"language-\">SELECT<\/code> komutu ile etkilenecek sat\u0131rlar\u0131 kontrol edin. Ayr\u0131ca, kritik i\u015flemler \u00f6ncesinde veritaban\u0131 yede\u011fi almak, olas\u0131 hatalar\u0131n \u00f6n\u00fcne ge\u00e7mek i\u00e7in alt\u0131n kurald\u0131r.<\/p>\n<\/p><\/div>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Basit Bir Envanter Y\u00f6netimi<\/h3>\n<p>Yukar\u0131daki temel SQL komutlar\u0131n\u0131 kullanarak, bir e-ticaret sitesi i\u00e7in basit bir envanter y\u00f6netim sistemi senaryosu olu\u015ftural\u0131m. Amac\u0131m\u0131z, \u00fcr\u00fcnleri listelemek, stok durumlar\u0131n\u0131 g\u00fcncellemek ve belirli kriterlere g\u00f6re \u00fcr\u00fcnleri y\u00f6netmek.<\/p>\n<p>Bir m\u00fc\u015fterinin 'Ak\u0131ll\u0131 Telefon' sat\u0131n ald\u0131\u011f\u0131n\u0131 varsayal\u0131m. Stok miktar\u0131n\u0131 g\u00fcncellememiz gerekiyor:<\/p>\n<pre><code>\n-- M\u00fc\u015fteri 1 adet 'Ak\u0131ll\u0131 Telefon' sat\u0131n ald\u0131, sto\u011fu azaltal\u0131m.\nUPDATE products SET stock_quantity = stock_quantity - 1 WHERE name = 'Ak\u0131ll\u0131 Telefon';\n\n-- G\u00fcncel stok durumunu kontrol edelim.\nSELECT name, stock_quantity FROM products WHERE name = 'Ak\u0131ll\u0131 Telefon';\n    <\/code><\/pre>\n<p>Yeni bir \u00fcr\u00fcn olan 'Tablet' ekleyelim:<\/p>\n<pre><code>\nINSERT INTO products (name, description, price, stock_quantity) VALUES\n('Tablet', 'Hafif ve g\u00fc\u00e7l\u00fc tablet', 450.00, 75);\n\n-- T\u00fcm \u00fcr\u00fcnleri fiyat\u0131na g\u00f6re azalan s\u0131rada listele.\nSELECT name, price, stock_quantity FROM products ORDER BY price DESC;\n    <\/code><\/pre>\n<p>Bir kampanya kapsam\u0131nda t\u00fcm 'Laptop' fiyatlar\u0131n\u0131 %10 d\u00fc\u015f\u00fcrelim:<\/p>\n<pre><code>\nUPDATE products SET price = price * 0.90 WHERE name = 'Laptop';\n\n-- Fiyat\u0131 g\u00fcncellenmi\u015f Laptop'u kontrol et.\nSELECT name, price FROM products WHERE name = 'Laptop';\n    <\/code><\/pre>\n<p>Stoku bitmi\u015f veya \u00e7ok az kalm\u0131\u015f \u00fcr\u00fcnleri tespit edelim (\u00f6rne\u011fin, stok 10'un alt\u0131nda olanlar):<\/p>\n<pre><code>\nSELECT name, stock_quantity FROM products WHERE stock_quantity < 10;\n    <\/code><\/pre>\n<p>Bu basit senaryolar, <code class=\"language-\">SELECT<\/code>, <code class=\"language-\">INSERT<\/code>, <code class=\"language-\">UPDATE<\/code> ve <code class=\"language-\">DELETE<\/code> komutlar\u0131n\u0131n g\u00fcnl\u00fck i\u015f operasyonlar\u0131nda nas\u0131l kullan\u0131labilece\u011fine dair somut \u00f6rnekler sunar. Veritaban\u0131 y\u00f6netiminin temelini olu\u015fturan bu i\u015flemler, herhangi bir veri odakl\u0131 uygulaman\u0131n kalbinde yer al\u0131r. Bu komutlar\u0131 ustaca kullanmak, veritaban\u0131n\u0131zdan en iyi \u015fekilde faydalanman\u0131z\u0131 ve uygulaman\u0131z\u0131n gereksinimlerini kar\u015f\u0131lamas\u0131n\u0131 sa\u011flayacakt\u0131r. Unutmay\u0131n, pratik yapmak bu komutlarda uzmanla\u015fman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>PostgreSQL Performans Optimizasyonu ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h2>\n<p>PostgreSQL'i kurup temel i\u015flemlerini \u00f6\u011frendikten sonra, s\u0131ra veritaban\u0131n\u0131z\u0131n performans\u0131n\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karmaya ve g\u00fcvenli\u011fini sa\u011flamaya gelir. B\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda veya yo\u011fun trafik alt\u0131nda \u00e7al\u0131\u015fan sistemlerde performans optimizasyonu ve g\u00fcvenlik, projenin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, PostgreSQL sunucunuzun daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacak ipu\u00e7lar\u0131n\u0131 ve veri g\u00fcvenli\u011finizi art\u0131racak en iyi uygulamalar\u0131 ele alaca\u011f\u0131z. Bu konular, sadece veritaban\u0131 y\u00f6neticileri i\u00e7in de\u011fil, ayn\u0131 zamanda veritaban\u0131 ile etkile\u015fim kuran uygulama geli\u015ftiricileri i\u00e7in de b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Do\u011fru yap\u0131land\u0131rma ve g\u00fcvenlik \u00f6nlemleri, hem veri kayb\u0131n\u0131 \u00f6nler hem de uygulaman\u0131z\u0131n daha sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Veritaban\u0131 Performans\u0131n\u0131 Art\u0131rmak \u0130\u00e7in Neler Yap\u0131labilir?<\/h3>\n<p>PostgreSQL'in performans\u0131n\u0131 art\u0131rmak i\u00e7in bir\u00e7ok farkl\u0131 strateji mevcuttur. Bu stratejiler genellikle do\u011fru indeksleme, sorgu optimizasyonu ve sunucu yap\u0131land\u0131rmas\u0131 etraf\u0131nda d\u00f6ner.<\/p>\n<ol>\n<li><strong>\u0130ndeksleme (Indexing):<\/strong>\n<p>En \u00f6nemli performans art\u0131r\u0131c\u0131 fakt\u00f6rlerden biridir. S\u0131k\u00e7a sorgulanan s\u00fctunlara indeks eklemek, veri arama i\u015flemlerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r. \u00d6rne\u011fin, <code class=\"language-\">products<\/code> tablosundaki <code class=\"language-\">name<\/code> s\u00fctununda s\u0131k\u00e7a arama yap\u0131yorsan\u0131z:<\/p>\n<pre><code>\nCREATE INDEX idx_products_name ON products (name);\n            <\/code><\/pre>\n<p>Ancak, her s\u00fctuna indeks eklemek performans\u0131 d\u00fc\u015f\u00fcrebilir \u00e7\u00fcnk\u00fc indeksler INSERT, UPDATE, DELETE i\u015flemlerinde ek y\u00fck olu\u015fturur. \u0130ndeksleri dikkatli se\u00e7mek ve sadece ger\u00e7ekten gerekli olan yerlere uygulamak \u00f6nemlidir. <code class=\"language-\">EXPLAIN ANALYZE<\/code> komutu, sorgular\u0131n\u0131z\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve hangi indekslerin kullan\u0131ld\u0131\u011f\u0131n\u0131 analiz etmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<\/li>\n<li><strong>Sorgu Optimizasyonu:<\/strong>\n<p>K\u00f6t\u00fc yaz\u0131lm\u0131\u015f sorgular, veritaban\u0131 performans\u0131n\u0131 ciddi \u015fekilde etkileyebilir. Sorgular\u0131 daha verimli hale getirmek i\u00e7in:<\/p>\n<ul>\n<li><code class=\"language-\">SELECT *<\/code> yerine sadece ihtiyac\u0131n\u0131z olan s\u00fctunlar\u0131 se\u00e7in.<\/li>\n<li><code class=\"language-\">JOIN<\/code> i\u015flemlerini dikkatli kullan\u0131n ve gereksiz birle\u015ftirmelerden ka\u00e7\u0131n\u0131n.<\/li>\n<li><code class=\"language-\">WHERE<\/code> ko\u015fullar\u0131n\u0131 indekslerden faydalanacak \u015fekilde optimize edin.<\/li>\n<li><code class=\"language-\">LIMIT<\/code> ve <code class=\"language-\">OFFSET<\/code> ile b\u00fcy\u00fck sonu\u00e7 k\u00fcmelerini sayfaland\u0131r\u0131n.<\/li>\n<\/ul>\n<p>Yine <code class=\"language-\">EXPLAIN ANALYZE<\/code> kullanarak sorgular\u0131n\u0131z\u0131n \u00e7al\u0131\u015fma planlar\u0131n\u0131 incelemek, dar bo\u011fazlar\u0131 tespit etmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<\/li>\n<li><strong>Sunucu Yap\u0131land\u0131rmas\u0131 (postgresql.conf):<\/strong>\n<p>PostgreSQL'in ana yap\u0131land\u0131rma dosyas\u0131 olan <code class=\"language-\">postgresql.conf<\/code>, sunucunuzun kaynak kullan\u0131m\u0131n\u0131 ve davran\u0131\u015f\u0131n\u0131 kontrol eden bir\u00e7ok parametre i\u00e7erir. \u00d6nemli parametrelerden baz\u0131lar\u0131:<\/p>\n<ul>\n<li><code class=\"language-\">shared_buffers<\/code>: Veritaban\u0131 taraf\u0131ndan kullan\u0131lan payla\u015f\u0131lan bellek miktar\u0131. Genellikle toplam RAM'in %25'i civar\u0131nda ayarlanmas\u0131 \u00f6nerilir.<\/li>\n<li><code class=\"language-\">work_mem<\/code>: Sorgular s\u0131ras\u0131nda ge\u00e7ici disk yaz\u0131mlar\u0131n\u0131 \u00f6nlemek i\u00e7in kullan\u0131lan bellek miktar\u0131.<\/li>\n<li><code class=\"language-\">maintenance_work_mem<\/code>: <code class=\"language-\">VACUUM<\/code>, <code class=\"language-\">CREATE INDEX<\/code> gibi bak\u0131m i\u015flemleri i\u00e7in ayr\u0131lan bellek.<\/li>\n<li><code class=\"language-\">wal_buffers<\/code>: Write-Ahead Log (WAL) i\u00e7in kullan\u0131lan bellek.<\/li>\n<li><code class=\"language-\">max_connections<\/code>: Ayn\u0131 anda izin verilen maksimum ba\u011flant\u0131 say\u0131s\u0131.<\/li>\n<\/ul>\n<p>Bu parametreleri sunucunuzun donan\u0131m \u00f6zelliklerine ve i\u015f y\u00fck\u00fcn\u00fcze g\u00f6re ayarlamak, performansta b\u00fcy\u00fck fark yaratabilir. Her de\u011fi\u015fiklikten sonra PostgreSQL servisini yeniden ba\u015flatmay\u0131 unutmay\u0131n.<\/p>\n<\/li>\n<li><strong>Otomatik Temizleme (Autovacuum):<\/strong>\n<p>PostgreSQL'in MVCC mimarisi nedeniyle, eski (art\u0131k g\u00f6r\u00fcnmeyen) sat\u0131r versiyonlar\u0131 veritaban\u0131nda kal\u0131r. <code class=\"language-\">VACUUM<\/code> i\u015flemi bu \"\u00f6l\u00fc\" sat\u0131rlar\u0131 temizler ve disk alan\u0131n\u0131 geri kazan\u0131r. <code class=\"language-\">autovacuum<\/code> servisi bu i\u015flemi otomatik olarak yapar ve varsay\u0131lan olarak etkindir. Ancak, yo\u011fun i\u015f y\u00fcklerinde <code class=\"language-\">autovacuum<\/code> ayarlar\u0131n\u0131 optimize etmek gerekebilir.<\/p>\n<\/li>\n<\/ol>\n<div class=\"tip-box\">\n<p> Uzman \u0130pucu: Performans optimizasyonu tek seferlik bir i\u015flem de\u011fildir. Veritaban\u0131 ve uygulama geli\u015ftik\u00e7e, performans izleme ve ayarlamalar\u0131 d\u00fczenli olarak yapman\u0131z gerekecektir. <code class=\"language-\">pg_stat_statements<\/code> gibi uzant\u0131lar, en yava\u015f sorgular\u0131 belirlemenize yard\u0131mc\u0131 olabilir.<\/p>\n<\/p><\/div>\n<h3>PostgreSQL G\u00fcvenli\u011fini Sa\u011flamak \u0130\u00e7in En \u0130yi Uygulamalar<\/h3>\n<p>Veritaban\u0131 g\u00fcvenli\u011fi, herhangi bir sistemin en kritik y\u00f6nlerinden biridir. Yetkisiz eri\u015fimi \u00f6nlemek, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumak ve gizlili\u011fi sa\u011flamak i\u00e7in a\u015fa\u011f\u0131daki en iyi uygulamalar\u0131 takip etmelisiniz:<\/p>\n<ol>\n<li><strong>G\u00fc\u00e7l\u00fc \u015eifreler ve Kullan\u0131c\u0131 Y\u00f6netimi:<\/strong>\n<ul>\n<li>T\u00fcm veritaban\u0131 kullan\u0131c\u0131lar\u0131 i\u00e7in karma\u015f\u0131k, benzersiz \u015fifreler kullan\u0131n.<\/li>\n<li><code class=\"language-\">postgres<\/code> s\u00fcper kullan\u0131c\u0131s\u0131n\u0131 do\u011frudan uygulama ba\u011flant\u0131lar\u0131 i\u00e7in kullanmaktan ka\u00e7\u0131n\u0131n. Her uygulama veya hizmet i\u00e7in ayr\u0131, en az yetkiye sahip kullan\u0131c\u0131lar olu\u015fturun.<\/li>\n<li>Gereksiz kullan\u0131c\u0131lar\u0131 silin veya devre d\u0131\u015f\u0131 b\u0131rak\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Eri\u015fim Kontrol\u00fc (pg_hba.conf):<\/strong>\n<p><code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131, hangi ana bilgisayarlardan, hangi kullan\u0131c\u0131lar\u0131n, hangi veritabanlar\u0131na, hangi kimlik do\u011frulama y\u00f6ntemiyle ba\u011flanabilece\u011fini belirler. Bu dosya, PostgreSQL'in a\u011f eri\u015fim kontrol\u00fcn\u00fcn kalbidir.<\/p>\n<ul>\n<li>Sadece g\u00fcvenilen IP adreslerinden ba\u011flant\u0131lara izin verin.<\/li>\n<li><code class=\"language-\">md5<\/code> veya <code class=\"language-\">scram-sha-256<\/code> gibi g\u00fc\u00e7l\u00fc kimlik do\u011frulama y\u00f6ntemlerini kullan\u0131n. <code class=\"language-\">trust<\/code> y\u00f6nteminden kesinlikle ka\u00e7\u0131n\u0131n, zira bu, \u015fifresiz ba\u011flant\u0131ya izin verir.<\/li>\n<li>Uzaktan eri\u015fime ihtiyac\u0131n\u0131z yoksa, <code class=\"language-\">listen_addresses<\/code> parametresini sadece <code class=\"language-\">localhost<\/code> olarak ayarlay\u0131n.<\/li>\n<\/ul>\n<p>\u00d6rnek bir <code class=\"language-\">pg_hba.conf<\/code> girdisi:<\/p>\n<pre><code>\n# TYPE  DATABASE        USER            ADDRESS                 METHOD\nhost    my_database     myuser          192.168.1.100\/32        md5\n            <\/code><\/pre>\n<p>Bu, <code class=\"language-\">myuser<\/code>'\u0131n <code class=\"language-\">my_database<\/code>'e sadece <code class=\"language-\">192.168.1.100<\/code> IP adresinden <code class=\"language-\">md5<\/code> \u015fifre do\u011frulamas\u0131 ile ba\u011flanmas\u0131na izin verir.<\/p>\n<\/li>\n<li><strong>A\u011f G\u00fcvenli\u011fi (Firewall):<\/strong>\n<p>Sunucunuzun g\u00fcvenlik duvar\u0131n\u0131 (\u00f6rne\u011fin UFW) kullanarak PostgreSQL'in varsay\u0131lan portu olan 5432'ye eri\u015fimi k\u0131s\u0131tlay\u0131n. Sadece g\u00fcvenilen IP adreslerinden gelen ba\u011flant\u0131lara izin verin.<\/p>\n<pre><code>\nsudo ufw allow from 192.168.1.100 to any port 5432\nsudo ufw enable\n            <\/code><\/pre>\n<\/li>\n<li><strong>SSL\/TLS Kullan\u0131m\u0131:<\/strong>\n<p>Veritaban\u0131 ile uygulama aras\u0131ndaki t\u00fcm ileti\u015fimi \u015fifrelemek i\u00e7in SSL\/TLS kullan\u0131n. Bu, \u00f6zellikle hassas verilerin a\u011f \u00fczerinden iletilirken ele ge\u00e7irilmesini \u00f6nler. <code class=\"language-\">postgresql.conf<\/code> dosyas\u0131nda <code class=\"language-\">ssl = on<\/code> ayar\u0131n\u0131 yapman\u0131z ve gerekli sertifikalar\u0131 yap\u0131land\u0131rman\u0131z gerekir.<\/p>\n<\/li>\n<li><strong>G\u00fcncel Tutma:<\/strong>\n<p>PostgreSQL sunucunuzu ve Ubuntu i\u015fletim sisteminizi d\u00fczenli olarak g\u00fcncelleyin. G\u00fcvenlik yamalar\u0131 ve hata d\u00fczeltmeleri, olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131r.<\/p>\n<\/li>\n<li><strong>Yedekleme ve Geri Y\u00fckleme:<\/strong>\n<p>D\u00fczenli ve g\u00fcvenli yedeklemeler, veri kayb\u0131 durumunda felaket kurtarma i\u00e7in hayati \u00f6neme sahiptir. Yedeklerinizi ayr\u0131 bir konumda saklay\u0131n ve geri y\u00fckleme prosed\u00fcrlerini d\u00fczenli olarak test edin.<\/p>\n<\/li>\n<\/ol>\n<p>Bu g\u00fcvenlik \u00f6nlemleri, PostgreSQL veritaban\u0131n\u0131z\u0131 potansiyel tehditlere kar\u015f\u0131 korumak i\u00e7in sa\u011flam bir savunma hatt\u0131 olu\u015fturur. Unutmay\u0131n, g\u00fcvenlik s\u00fcrekli bir s\u00fcre\u00e7tir ve d\u00fczenli denetim ile g\u00fcncellemeler gerektirir.<\/p>\n<h2>Yedekleme, Geri Y\u00fckleme ve Uzaktan Ba\u011flant\u0131 Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Veritaban\u0131 y\u00f6netimi s\u00f6z konusu oldu\u011funda, veri kayb\u0131na kar\u015f\u0131 haz\u0131rl\u0131kl\u0131 olmak ve d\u0131\u015far\u0131dan eri\u015fimi do\u011fru bir \u015fekilde yap\u0131land\u0131rmak hayati \u00f6nem ta\u015f\u0131r. Bu b\u00f6l\u00fcm, PostgreSQL veritabanlar\u0131n\u0131z i\u00e7in sa\u011flam yedekleme ve geri y\u00fckleme stratejilerini, ayr\u0131ca uzaktan ba\u011flant\u0131lar\u0131 g\u00fcvenli bir \u015fekilde nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ele alacakt\u0131r. Felaket kurtarma senaryolar\u0131na haz\u0131rl\u0131kl\u0131 olmak, i\u015f s\u00fcreklili\u011fini sa\u011flamak i\u00e7in vazge\u00e7ilmezdir. Ayn\u0131 \u015fekilde, uygulamalar\u0131n veya geli\u015ftiricilerin veritaban\u0131na uzaktan eri\u015fmesi gerekti\u011finde, bu eri\u015fimin hem i\u015flevsel hem de g\u00fcvenli olmas\u0131 gerekir. Bu konular, veritaban\u0131 y\u00f6neticisinin en \u00f6nemli sorumluluklar\u0131ndan baz\u0131lar\u0131d\u0131r ve do\u011fru bir \u015fekilde uygulanmalar\u0131, sistemlerinizin dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 ve eri\u015filebilirli\u011fini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<h3>Veritaban\u0131 Yedekleme ve Geri Y\u00fckleme Stratejileri<\/h3>\n<p>Veritaban\u0131 yedeklemesi, herhangi bir felaket (donan\u0131m ar\u0131zas\u0131, yaz\u0131l\u0131m hatas\u0131, veri bozulmas\u0131 veya insan hatas\u0131) durumunda verilerinizin g\u00fcvende olmas\u0131n\u0131 sa\u011flaman\u0131n tek yoludur. PostgreSQL, yedekleme ve geri y\u00fckleme i\u00e7in birka\u00e7 g\u00fc\u00e7l\u00fc ara\u00e7 sunar:<\/p>\n<h4>pg_dump ile Yedekleme<\/h4>\n<p><code class=\"language-\">pg_dump<\/code> yard\u0131mc\u0131 program\u0131, bir PostgreSQL veritaban\u0131n\u0131n veya belirli tablolar\u0131n SQL beti\u011fi veya ar\u015fiv format\u0131nda yede\u011fini almak i\u00e7in kullan\u0131l\u0131r. Bu yedekler, ba\u015fka bir PostgreSQL sunucusuna veya ayn\u0131 sunucudaki farkl\u0131 bir veritaban\u0131na geri y\u00fcklenebilir.<\/p>\n<ul>\n<li><strong>Belirli bir veritaban\u0131n\u0131 yedekleme:<\/strong>\n<pre><code>\nsudo -i -u postgres pg_dump -Fc my_database > \/var\/backups\/postgresql\/my_database_$(date +%Y%m%d).bak\n            <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">my_database<\/code> veritaban\u0131n\u0131n s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f \u00f6zel formatta bir yede\u011fini al\u0131r ve <code class=\"language-\">\/var\/backups\/postgresql\/<\/code> dizinine tarih damgas\u0131yla kaydeder. <code class=\"language-\">-Fc<\/code> (format custom) se\u00e7ene\u011fi, <code class=\"language-\">pg_restore<\/code> ile geri y\u00fcklemede esneklik sa\u011flar.<\/p>\n<\/li>\n<li><strong>T\u00fcm veritabanlar\u0131n\u0131 yedekleme (globals dahil):<\/strong>\n<pre><code>\nsudo -i -u postgres pg_dumpall > \/var\/backups\/postgresql\/all_databases_$(date +%Y%m%d).sql\n            <\/code><\/pre>\n<p><code class=\"language-\">pg_dumpall<\/code>, t\u00fcm veritabanlar\u0131n\u0131 ve genel objeleri (kullan\u0131c\u0131lar, tablespace'ler vb.) SQL beti\u011fi olarak yedekler. Bu, t\u00fcm PostgreSQL k\u00fcmesinin yede\u011fini almak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p>Yedekleme dosyalar\u0131n\u0131 g\u00fcvenli bir yere (\u00f6rne\u011fin, bulut depolama, uzak bir sunucu) kopyalamak \u00e7ok \u00f6nemlidir. Yedeklerinizi d\u00fczenli olarak test ederek, geri y\u00fckleme i\u015fleminin sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<\/p>\n<h4>pg_restore ile Geri Y\u00fckleme<\/h4>\n<p><code class=\"language-\">pg_restore<\/code> yard\u0131mc\u0131 program\u0131, <code class=\"language-\">pg_dump<\/code> ile olu\u015fturulan \u00f6zel format yedeklerini geri y\u00fcklemek i\u00e7in kullan\u0131l\u0131r. SQL beti\u011fi yedeklerini (<code class=\"language-\">.sql<\/code> uzant\u0131l\u0131) geri y\u00fcklemek i\u00e7in <code class=\"language-\">psql<\/code> kullan\u0131l\u0131r.<\/p>\n<ul>\n<li><strong>\u00d6zel format yede\u011fini geri y\u00fckleme:<\/strong>\n<p>\u00d6nce bo\u015f bir veritaban\u0131 olu\u015fturman\u0131z gerekebilir:<\/p>\n<pre><code>\nsudo -i -u postgres psql -c \"CREATE DATABASE new_database;\"\nsudo -i -u postgres pg_restore -d new_database \/var\/backups\/postgresql\/my_database_20231027.bak\n            <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">my_database_20231027.bak<\/code> yede\u011fini <code class=\"language-\">new_database<\/code> adl\u0131 yeni bir veritaban\u0131na geri y\u00fckler.<\/p>\n<\/li>\n<li><strong>SQL beti\u011fi yede\u011fini geri y\u00fckleme:<\/strong>\n<pre><code>\nsudo -i -u postgres psql -f \/var\/backups\/postgresql\/all_databases_20231027.sql postgres\n            <\/code><\/pre>\n<p>Bu, <code class=\"language-\">pg_dumpall<\/code> ile al\u0131nan SQL beti\u011fini <code class=\"language-\">postgres<\/code> veritaban\u0131na (bu genellikle global ayarlar\u0131 geri y\u00fcklemek i\u00e7in kullan\u0131l\u0131r) geri y\u00fckler. <code class=\"language-\">psql<\/code> komutuna <code class=\"language-\">-d<\/code> parametresi ile belirli bir veritaban\u0131na da geri y\u00fckleme yapabilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<div class=\"tip-box\">\n<p> Uzman \u0130pucu: Otomatik yedekleme komutlar\u0131n\u0131 cron i\u015fleri olarak planlay\u0131n. Ayr\u0131ca, yedekleme dosyalar\u0131n\u0131n \u015fifrelenmesini ve fiziksel olarak ayr\u0131 bir konumda tutulmas\u0131n\u0131 sa\u011flay\u0131n. Yedekleme stratejinizin bir par\u00e7as\u0131 olarak, Point-in-Time Recovery (PITR) i\u00e7in WAL ar\u015fivlemeyi de d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<\/p><\/div>\n<h3>Uzaktan PostgreSQL Ba\u011flant\u0131s\u0131 Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r?<\/h3>\n<p>Uygulamalar\u0131n\u0131z\u0131n veya di\u011fer sunucular\u0131n PostgreSQL veritaban\u0131n\u0131za uzaktan ba\u011flanabilmesi i\u00e7in baz\u0131 yap\u0131land\u0131rma de\u011fi\u015fiklikleri yapman\u0131z gerekir. Bu, iki ana ad\u0131mdan olu\u015fur: PostgreSQL'in a\u011f aray\u00fczlerini dinlemesini sa\u011flamak ve <code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131nda uygun eri\u015fim kurallar\u0131n\u0131 tan\u0131mlamak.<\/p>\n<ol>\n<li><strong><code class=\"language-\">postgresql.conf<\/code> Dosyas\u0131n\u0131 D\u00fczenleme:<\/strong>\n<p>PostgreSQL'in sadece <code class=\"language-\">localhost<\/code> yerine belirli IP adreslerinden veya t\u00fcm a\u011f aray\u00fczlerinden ba\u011flant\u0131lar\u0131 kabul etmesi i\u00e7in <code class=\"language-\">postgresql.conf<\/code> dosyas\u0131n\u0131 d\u00fczenlemeniz gerekir. Bu dosya genellikle <code class=\"language-\">\/etc\/postgresql\/10\/main\/postgresql.conf<\/code> yolunda bulunur (s\u00fcr\u00fcm numaras\u0131 farkl\u0131l\u0131k g\u00f6sterebilir).<\/p>\n<pre><code>\nsudo nano \/etc\/postgresql\/10\/main\/postgresql.conf\n            <\/code><\/pre>\n<p>Dosya i\u00e7inde <code class=\"language-\">listen_addresses<\/code> sat\u0131r\u0131n\u0131 bulun ve a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-ini\">\n# What IP address(es) to listen on; '*' means all\nlisten_addresses = '*'\n            <\/code><\/pre>\n<p><code class=\"language-\">*<\/code> de\u011feri, PostgreSQL'in sunucunuzdaki t\u00fcm a\u011f aray\u00fczlerinden gelen ba\u011flant\u0131lar\u0131 dinleyece\u011fi anlam\u0131na gelir. Belirli bir IP adresinden ba\u011flant\u0131lar\u0131 dinlemek isterseniz, <code class=\"language-\">'192.168.1.10'<\/code> gibi bir IP adresi de belirtebilirsiniz. De\u011fi\u015fikli\u011fi kaydettikten sonra dosyay\u0131 kapat\u0131n.<\/p>\n<\/li>\n<li><strong><code class=\"language-\">pg_hba.conf<\/code> Dosyas\u0131n\u0131 D\u00fczenleme:<\/strong>\n<p>Ard\u0131ndan, uzaktan ba\u011flant\u0131lara izin vermek i\u00e7in <code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131n\u0131 d\u00fczenlemeniz gerekir. Bu dosya genellikle <code class=\"language-\">\/etc\/postgresql\/10\/main\/pg_hba.conf<\/code> yolunda bulunur.<\/p>\n<pre><code>\nsudo nano \/etc\/postgresql\/10\/main\/pg_hba.conf\n            <\/code><\/pre>\n<p>Dosyan\u0131n sonuna, uzaktan eri\u015fim izni vermek istedi\u011finiz her ba\u011flant\u0131 i\u00e7in bir sat\u0131r ekleyin. \u00d6rne\u011fin, <code class=\"language-\">myuser<\/code> kullan\u0131c\u0131s\u0131n\u0131n <code class=\"language-\">my_database<\/code> veritaban\u0131na <code class=\"language-\">192.168.1.0\/24<\/code> a\u011f\u0131ndan <code class=\"language-\">md5<\/code> \u015fifre do\u011frulamas\u0131 ile ba\u011flanmas\u0131na izin vermek i\u00e7in:<\/p>\n<pre><code class=\"language-ini\">\n# TYPE  DATABASE        USER            ADDRESS                 METHOD\nhost    my_database     myuser          192.168.1.0\/24          md5\n            <\/code><\/pre>\n<p>Burada <code class=\"language-\">192.168.1.0\/24<\/code>, <code class=\"language-\">192.168.1.x<\/code> format\u0131ndaki t\u00fcm IP adreslerinden gelen ba\u011flant\u0131lara izin verir. Sadece tek bir IP adresine izin vermek isterseniz, <code class=\"language-\">192.168.1.100\/32<\/code> gibi bir de\u011fer kullanabilirsiniz. De\u011fi\u015fiklikleri kaydettikten sonra dosyay\u0131 kapat\u0131n.<\/p>\n<\/li>\n<li><strong>PostgreSQL Servisini Yeniden Ba\u015flatma:<\/strong>\n<p>Bu yap\u0131land\u0131rma de\u011fi\u015fikliklerinin etkili olmas\u0131 i\u00e7in PostgreSQL servisini yeniden ba\u015flatman\u0131z gerekir:<\/p>\n<pre><code>\nsudo systemctl restart postgresql\n            <\/code><\/pre>\n<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131n\u0131 Yap\u0131land\u0131rma (UFW):<\/strong>\n<p>Son olarak, sunucunuzun g\u00fcvenlik duvar\u0131n\u0131n (UFW) PostgreSQL'in varsay\u0131lan portu olan 5432'ye gelen ba\u011flant\u0131lara izin verdi\u011finden emin olun. Sadece belirli IP adreslerinden gelen ba\u011flant\u0131lara izin vermek en g\u00fcvenli yakla\u015f\u0131md\u0131r:<\/p>\n<pre><code>\nsudo ufw allow from 192.168.1.0\/24 to any port 5432\nsudo ufw enable\n            <\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, <code class=\"language-\">myuser<\/code> kullan\u0131c\u0131s\u0131, <code class=\"language-\">192.168.1.0\/24<\/code> a\u011f\u0131 i\u00e7indeki herhangi bir makineden <code class=\"language-\">my_database<\/code> veritaban\u0131na uzaktan ba\u011flanabilecektir. Ba\u011flant\u0131 denemeleri yaparken, uygulaman\u0131z\u0131n veya istemcinizin do\u011fru IP adresini, portu, kullan\u0131c\u0131 ad\u0131n\u0131 ve \u015fifreyi kulland\u0131\u011f\u0131ndan emin olun. Uzaktan ba\u011flant\u0131lar\u0131 her zaman en az yetki ilkesiyle ve g\u00fc\u00e7l\u00fc kimlik do\u011frulama y\u00f6ntemleriyle yap\u0131land\u0131rmak, g\u00fcvenlik risklerini minimize etmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<\/ol>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Ubuntu 18.04 \u00fczerinde PostgreSQL kurulumundan ba\u015flayarak, temel veritaban\u0131 y\u00f6netimi, SQL komutlar\u0131, performans optimizasyonu, g\u00fcvenlik ipu\u00e7lar\u0131 ve yedekleme\/geri y\u00fckleme stratejilerine kadar bir\u00e7ok konuyu detayl\u0131 bir \u015fekilde inceledik. Art\u0131k PostgreSQL'in g\u00fcc\u00fcn\u00fc ve esnekli\u011fini kullanarak kendi uygulamalar\u0131n\u0131z i\u00e7in sa\u011flam ve g\u00fcvenilir bir veri altyap\u0131s\u0131 olu\u015fturma becerisine sahipsiniz. PostgreSQL'in a\u00e7\u0131k kaynak yap\u0131s\u0131, geni\u015fletilebilirli\u011fi ve topluluk deste\u011fi, onu modern uygulama geli\u015ftirme i\u00e7in m\u00fckemmel bir se\u00e7im haline getirir. Unutmay\u0131n, veritaban\u0131 y\u00f6netimi s\u00fcrekli \u00f6\u011frenme ve pratik gerektiren bir aland\u0131r. Bu rehberde edindi\u011finiz bilgilerle, PostgreSQL d\u00fcnyas\u0131nda daha ileri ad\u0131mlar atabilir, daha karma\u015f\u0131k projelerde yeteneklerinizi geli\u015ftirebilirsiniz.<\/p>\n<p>Herhangi bir teknik sistemde oldu\u011fu gibi, PostgreSQL ile \u00e7al\u0131\u015f\u0131rken de zaman zaman sorular\u0131n\u0131z olabilir veya baz\u0131 konular hakk\u0131nda ek bilgiye ihtiya\u00e7 duyabilirsiniz. \u0130\u015fte PostgreSQL kullan\u0131c\u0131lar\u0131 taraf\u0131ndan s\u0131k\u00e7a sorulan baz\u0131 sorular ve cevaplar\u0131:<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h4>PostgreSQL'i Ubuntu 18.04'e kurdum ama ba\u011flanam\u0131yorum, ne yapmal\u0131y\u0131m?<\/h4>\n<p>Ba\u011flant\u0131 sorunlar\u0131 genellikle birka\u00e7 nedenden kaynaklan\u0131r. \u0130lk olarak, PostgreSQL servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin: <\/p>\n<pre><code>sudo systemctl status postgresql<\/code><\/pre>\n<p> E\u011fer \u00e7al\u0131\u015fm\u0131yorsa ba\u015flat\u0131n. \u0130kinci olarak, <code class=\"language-\">psql<\/code> ile ba\u011flanmaya \u00e7al\u0131\u015f\u0131rken do\u011fru kullan\u0131c\u0131 ad\u0131, veritaban\u0131 ad\u0131, ana bilgisayar (localhost veya IP) ve portu kulland\u0131\u011f\u0131n\u0131zdan emin olun. Uzaktan ba\u011flant\u0131 deniyorsan\u0131z, <code class=\"language-\">postgresql.conf<\/code> dosyas\u0131ndaki <code class=\"language-\">listen_addresses<\/code> ayar\u0131n\u0131 ve <code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131ndaki eri\u015fim kurallar\u0131n\u0131 kontrol edin. Son olarak, sunucunuzun g\u00fcvenlik duvar\u0131n\u0131n (UFW gibi) 5432 portuna gelen ba\u011flant\u0131lara izin verdi\u011finden emin olun.<\/p>\n<\/li>\n<li>\n<h4><code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131n\u0131 d\u00fczenledikten sonra ne yapmal\u0131y\u0131m?<\/h4>\n<p><code class=\"language-\">pg_hba.conf<\/code> dosyas\u0131nda yapt\u0131\u011f\u0131n\u0131z her de\u011fi\u015fiklikten sonra, PostgreSQL servisini yeniden ba\u015flatman\u0131z gerekir ki de\u011fi\u015fiklikler etkili olsun: <\/p>\n<pre><code>sudo systemctl restart postgresql<\/code><\/pre>\n<p> Bu ad\u0131m olmadan, yapt\u0131\u011f\u0131n\u0131z kurallar uygulanmayacakt\u0131r.<\/p>\n<\/li>\n<li>\n<h4>PostgreSQL i\u00e7in en iyi yedekleme stratejisi nedir?<\/h4>\n<p>En iyi yedekleme stratejisi, veri b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fcze, kurtarma s\u00fcresi hedeflerinize (RTO) ve veri kayb\u0131 tolerans\u0131n\u0131za (RPO) ba\u011fl\u0131d\u0131r. Genellikle, <code class=\"language-\">pg_dump<\/code> veya <code class=\"language-\">pg_dumpall<\/code> ile d\u00fczenli (g\u00fcnl\u00fck\/haftal\u0131k) mant\u0131ksal yedeklemeler almak iyi bir ba\u015flang\u0131\u00e7t\u0131r. Kritik uygulamalar i\u00e7in, Point-in-Time Recovery (PITR) sa\u011flayan s\u00fcrekli ar\u015fivleme (WAL archiving) kullanmak en g\u00fcvenli yakla\u015f\u0131md\u0131r. Ayr\u0131ca, yedeklerinizi \u015fifrelemeyi, ayr\u0131 bir konumda saklamay\u0131 ve d\u00fczenli olarak geri y\u00fckleme testleri yapmay\u0131 unutmay\u0131n.<\/p>\n<\/li>\n<li>\n<h4>PostgreSQL'de performans sorunlar\u0131 ya\u015f\u0131yorum, nereden ba\u015flamal\u0131y\u0131m?<\/h4>\n<p>Performans sorunlar\u0131n\u0131 gidermek i\u00e7in \u00f6ncelikle yava\u015f \u00e7al\u0131\u015fan sorgular\u0131 tespit etmelisiniz. Bunun i\u00e7in <code class=\"language-\">pg_stat_statements<\/code> gibi uzant\u0131lar\u0131 kullanabilir veya uygulama loglar\u0131n\u0131 inceleyebilirsiniz. Ard\u0131ndan, bu sorgular\u0131n \u00e7al\u0131\u015fma planlar\u0131n\u0131 <code class=\"language-\">EXPLAIN ANALYZE<\/code> ile analiz edin. \u00c7o\u011fu zaman sorun, eksik veya yanl\u0131\u015f indeksleme, k\u00f6t\u00fc yaz\u0131lm\u0131\u015f sorgular veya yetersiz sunucu yap\u0131land\u0131rmas\u0131ndan kaynaklan\u0131r (<code class=\"language-\">shared_buffers<\/code>, <code class=\"language-\">work_mem<\/code> gibi parametreler). \u0130ndeksleri optimize edin, sorgular\u0131 yeniden yaz\u0131n ve <code class=\"language-\">postgresql.conf<\/code> ayarlar\u0131n\u0131 sunucunuzun donan\u0131m\u0131na ve i\u015f y\u00fck\u00fcne g\u00f6re ayarlay\u0131n.<\/p>\n<\/li>\n<li>\n<h4>Hangi PostgreSQL s\u00fcr\u00fcm\u00fcn\u00fc kullanmal\u0131y\u0131m?<\/h4>\n<p>Genellikle, en son kararl\u0131 s\u00fcr\u00fcm\u00fc kullanman\u0131z \u00f6nerilir. Yeni s\u00fcr\u00fcmler, performans iyile\u015ftirmeleri, yeni \u00f6zellikler ve g\u00fcvenlik yamalar\u0131 i\u00e7erir. Ubuntu 18.04'\u00fcn varsay\u0131lan depolar\u0131 genellikle biraz daha eski bir kararl\u0131 s\u00fcr\u00fcm\u00fc (\u00f6rne\u011fin PostgreSQL 10) sunar. E\u011fer daha g\u00fcncel bir s\u00fcr\u00fcme ihtiyac\u0131n\u0131z varsa, PostgreSQL'in kendi APT deposunu sisteminize ekleyerek istedi\u011finiz s\u00fcr\u00fcm\u00fc kurabilirsiniz. Ancak, \u00fcretim ortamlar\u0131nda s\u00fcr\u00fcm y\u00fckseltmeleri yapmadan \u00f6nce kapsaml\u0131 testler yapman\u0131z \u00f6nemlidir.<\/p>\n<\/li>\n<\/ol>\n<style>\n        \/* Basic styles for readability *\/\n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 1000px;\n            margin: 20px auto;\n            padding: 0 15px;\n            background-color: #f9f9f9;\n        }\n        h2 {\n            color: #2c3e50;\n            border-bottom: 2px solid #3498db;\n            padding-bottom: 10px;\n            margin-top: 40px;\n        }\n        h3 {\n            color: #34495e;\n            margin-top: 30px;\n        }\n        p {\n            margin-bottom: 15px;\n            text-align: justify;\n        }\n        pre {\n            background-color: #ecf0f1;\n            border: 1px solid #bdc3c7;\n            padding: 15px;\n            border-radius: 5px;\n            overflow-x: auto;\n            margin-bottom: 20px;\n        }\n        code {\n            font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n            background-color: #e0e6e7;\n            padding: 2px 4px;\n            border-radius: 3px;\n            font-size: 0.9em;\n        }\n        pre code {\n            background-color: transparent;\n            padding: 0;\n        }\n        ul, ol {\n            margin-bottom: 15px;\n            padding-left: 25px;\n        }\n        li {\n            margin-bottom: 8px;\n        }\n        .tip-box {\n            background-color: #e8f5e9; \/* Light green *\/\n            border-left: 5px solid #4CAF50; \/* Green border *\/\n            padding: 15px;\n            margin: 20px 0;\n            border-radius: 4px;\n            font-style: italic;\n            color: #388e3c; \/* Darker green text *\/\n        }\n        .tip-box p {\n            margin: 0;\n            text-align: left;\n        }<\/p>\n<p>        \/* Responsive design example using media queries *\/\n        @media (max-width: 768px) {\n            body {\n                margin: 10px auto;\n                padding: 0 10px;\n            }\n            h2 {\n                font-size: 1.8em;\n            }\n            h3 {\n                font-size: 1.4em;\n            }\n            pre {\n                padding: 10px;\n            }\n        }<\/p>\n<p>        @media (max-width: 480px) {\n            body {\n                font-size: 0.95em;\n            }\n            h2 {\n                font-size: 1.5em;\n            }\n            h3 {\n                font-size: 1.2em;\n            }\n            ul, ol {\n                padding-left: 20px;\n            }\n        }\n    <\/style>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 18.04 \u00dczerine PostgreSQL Kurulumu ve Kullan\u0131m\u0131 Rehberi Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur.&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-39289","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?<\/title>\n<meta name=\"description\" content=\"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL&#039;in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?\" \/>\n<meta property=\"og:description\" content=\"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL&#039;in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-18T09:21:18+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"36 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?\",\"datePublished\":\"2026-02-18T09:21:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\"},\"wordCount\":6452,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\",\"name\":\"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-18T09:21:18+00:00\",\"description\":\"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL'in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?","description":"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL'in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/","og_locale":"tr_TR","og_type":"article","og_title":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?","og_description":"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL'in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.","og_url":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-18T09:21:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"36 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?","datePublished":"2026-02-18T09:21:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/"},"wordCount":6452,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/","url":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/","name":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-18T09:21:18+00:00","description":"Modern uygulama geli\u015ftirme d\u00fcnyas\u0131nda veri y\u00f6netimi, projelerin bel kemi\u011fini olu\u015fturur. Peki, g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemini (RDBMS) Ubuntu 18.04 sunucunuza nas\u0131l kurar ve verimli bir \u015fekilde kullan\u0131rs\u0131n\u0131z? Bu kapsaml\u0131 rehber, PostgreSQL'in kurulumundan temel veritaban\u0131 operasyonlar\u0131na, performans optimizasyonundan g\u00fcvenlik ipu\u00e7lar\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayarak sizi s\u0131f\u0131rdan uzman seviyesine ta\u015f\u0131yacak.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/neden-postgresql-ve-ubuntu-18-04-ikilisini-tercih-etmelisiniz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Neden PostgreSQL ve Ubuntu 18.04 \u0130kilisini Tercih Etmelisiniz?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39289"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39289\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}