{"id":36002,"date":"2025-12-06T16:40:43","date_gmt":"2025-12-06T13:40:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36002"},"modified":"2025-12-06T16:40:43","modified_gmt":"2025-12-06T13:40:43","slug":"django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/","title":{"rendered":"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi<\/h2>\n<p>Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmenizi sa\u011flayan pop\u00fcler bir web \u00e7at\u0131s\u0131d\u0131r. Genellikle ilk projelerde hafif ve kullan\u0131m\u0131 kolay olan SQLite ile ba\u015flansa da, ger\u00e7ek d\u00fcnya \u00fcretim ortamlar\u0131nda daha g\u00fc\u00e7l\u00fc, \u00f6l\u00e7eklenebilir ve \u00f6zellik zengini bir veritaban\u0131 sistemine ihtiya\u00e7 duyulur. \u0130\u015fte bu noktada PostgreSQL devreye girer. PostgreSQL, y\u00fcksek performans, g\u00fcvenilirlik ve geli\u015fmi\u015f \u00f6zellikleriyle \u00f6ne \u00e7\u0131kan a\u00e7\u0131k kaynakl\u0131 bir ili\u015fkisel veritaban\u0131 y\u00f6netim sistemidir (RDBMS). Bu makalede, Django uygulaman\u0131z\u0131 Ubuntu 22.04 i\u015fletim sistemi \u00fczerinde PostgreSQL ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde anlataca\u011f\u0131z.<\/p>\n<h3>Giri\u015f: Neden PostgreSQL?<\/h3>\n<p>Django projeleri varsay\u0131lan olarak SQLite veritaban\u0131 ile gelir. Geli\u015ftirme s\u00fcrecinin ba\u015flang\u0131c\u0131nda veya k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in SQLite yeterli olabilir. Ancak uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, e\u015fzamanl\u0131 kullan\u0131c\u0131 say\u0131s\u0131 artt\u0131k\u00e7a veya daha karma\u015f\u0131k veri yap\u0131lar\u0131 ve sorgularla u\u011fra\u015ft\u0131k\u00e7a SQLite&#8217;\u0131n s\u0131n\u0131rlamalar\u0131 ortaya \u00e7\u0131kacakt\u0131r.<\/p>\n<p>PostgreSQL, bu s\u0131n\u0131rlamalar\u0131n \u00fcstesinden gelmek i\u00e7in m\u00fckemmel bir alternatiftir. \u0130\u015fte PostgreSQL&#8217;i tercih etmeniz i\u00e7in baz\u0131 nedenler:<\/p>\n<p>*   <strong>G\u00fcvenilirlik ve Veri B\u00fct\u00fcnl\u00fc\u011f\u00fc:<\/strong> ACID (Atomicity, Consistency, Isolation, Durability) uyumlulu\u011fu sayesinde veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc en \u00fcst d\u00fczeyde sa\u011flar.<br \/>\n*   <strong>Geli\u015fmi\u015f \u00d6zellikler:<\/strong> JSON\/JSONB, hstore, co\u011frafi veri tipleri (PostGIS ile) gibi geli\u015fmi\u015f veri tipleri ve fonksiyonlar\u0131 destekler.<br \/>\n*   <strong>Performans ve \u00d6l\u00e7eklenebilirlik:<\/strong> B\u00fcy\u00fck veri setleri ve y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar i\u00e7in optimize edilmi\u015ftir. Etkili indeksleme, sorgu planlay\u0131c\u0131 ve geli\u015fmi\u015f optimizasyon se\u00e7enekleri sunar.<br \/>\n*   <strong>Geni\u015fletilebilirlik:<\/strong> Kullan\u0131c\u0131 tan\u0131ml\u0131 fonksiyonlar, veri tipleri ve operat\u00f6rler olu\u015fturarak veritaban\u0131n\u0131 ihtiya\u00e7lar\u0131n\u0131za g\u00f6re geni\u015fletebilirsiniz.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Kapsaml\u0131 yetkilendirme sistemi, SSL\/TLS \u015fifreleme ve geli\u015fmi\u015f denetim \u00f6zellikleri ile veritaban\u0131 g\u00fcvenli\u011fini sa\u011flar.<br \/>\n*   <strong>A\u00e7\u0131k Kaynak:<\/strong> \u00dccretsiz ve a\u00e7\u0131k kaynakl\u0131 olmas\u0131, maliyetleri d\u00fc\u015f\u00fcr\u00fcr ve geni\u015f bir topluluk deste\u011fi sunar.<\/p>\n<p>Bu rehberde, Ubuntu 22.04 \u00fczerinde PostgreSQL kurulumundan, Django projenizin ayarlar\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131na ve uygulaman\u0131z\u0131n veritaban\u0131 ile ba\u015far\u0131l\u0131 bir \u015fekilde ileti\u015fim kurmas\u0131na kadar t\u00fcm ad\u0131mlar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olun:<\/p>\n<p>*   <strong>Ubuntu 22.04 Sunucusu:<\/strong> Temiz bir Ubuntu 22.04 kurulumu veya sanal makinesi.<br \/>\n*   <strong>Temel Terminal Bilgisi:<\/strong> Linux komut sat\u0131r\u0131 ile temel d\u00fczeyde \u00e7al\u0131\u015fma bilgisi.<br \/>\n*   <strong>Python 3 ve Pip:<\/strong> Ubuntu 22.04 genellikle Python 3 ile gelir. <code>python3 --version<\/code> ve <code>pip3 --version<\/code> komutlar\u0131yla kontrol edebilirsiniz. Eksikse <code>sudo apt install python3 python3-pip<\/code> ile kurabilirsiniz.<br \/>\n*   <strong>Django:<\/strong> Halihaz\u0131rda bir Django projeniz olmas\u0131 veya yeni bir proje olu\u015fturmaya haz\u0131r olman\u0131z.<\/p>\n<h3>PostgreSQL Kurulumu<\/h3>\n<p>\u0130lk ad\u0131m\u0131m\u0131z, Ubuntu sunucunuza PostgreSQL veritaban\u0131 sistemini kurmakt\u0131r.<\/p>\n<h4>Sistem Paketlerini G\u00fcncelleme<\/h4>\n<p>Herhangi bir yaz\u0131l\u0131m kurulumuna ba\u015flamadan \u00f6nce, sisteminizin paket listesini g\u00fcncellemek ve mevcut paketleri y\u00fckseltmek iyi bir uygulamad\u0131r. Bu, en son g\u00fcvenlik yamalar\u0131na ve yaz\u0131l\u0131m s\u00fcr\u00fcmlerine sahip olman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p><code>sudo apt update<\/code> komutu, yerel paket indeksinizi g\u00fcncellerken, <code>sudo apt upgrade -y<\/code> komutu ise sisteminizdeki t\u00fcm y\u00fckl\u00fc paketleri en yeni s\u00fcr\u00fcmlerine y\u00fckseltir. <code>-y<\/code> bayra\u011f\u0131, t\u00fcm sorulara otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 vermenizi sa\u011flar.<\/p>\n<h4>PostgreSQL Sunucusunu Kurma<\/h4>\n<p>PostgreSQL ve ilgili yard\u0131mc\u0131 ara\u00e7lar\u0131 kurmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo apt install postgresql postgresql-contrib -y<\/code><\/pre>\n<p>Bu komut, PostgreSQL sunucusunu (<code>postgresql<\/code>) ve \u00e7e\u015fitli ek mod\u00fcller ile ara\u00e7lar\u0131 (<code>postgresql-contrib<\/code>) kurar. Kurulum tamamland\u0131\u011f\u0131nda, PostgreSQL servisi otomatik olarak ba\u015flat\u0131lacak ve sistem a\u00e7\u0131l\u0131\u015f\u0131nda otomatik olarak \u00e7al\u0131\u015facak \u015fekilde yap\u0131land\u0131r\u0131lacakt\u0131r.<\/p>\n<h4>PostgreSQL Servis Durumunu Kontrol Etme<\/h4>\n<p>Kurulumdan sonra PostgreSQL servisinin d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol etmek \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">systemctl status postgresql<\/code><\/pre>\n<p>Bu komut, PostgreSQL servisinin durumunu g\u00f6sterir. \u00c7\u0131kt\u0131da <code>active (exited)<\/code> veya <code>active (running)<\/code> gibi bir ifade g\u00f6rmelisiniz. <code>active (running)<\/code> idealdir. E\u011fer farkl\u0131 bir durum g\u00f6r\u00fcyorsan\u0131z, <code>sudo systemctl start postgresql<\/code> komutuyla servisi manuel olarak ba\u015flatmay\u0131 deneyebilirsiniz.<\/p>\n<h4>PostgreSQL Kullan\u0131c\u0131s\u0131 ve Veritaban\u0131 Olu\u015fturma<\/h4>\n<p>PostgreSQL, varsay\u0131lan olarak <code>postgres<\/code> adl\u0131 bir s\u00fcper kullan\u0131c\u0131 hesab\u0131 olu\u015fturur. Bu hesap, Linux&#8217;taki <code>root<\/code> kullan\u0131c\u0131s\u0131na benzer \u015fekilde, veritaban\u0131 \u00fczerinde tam yetkiye sahiptir. Veritaban\u0131 i\u015flemleri i\u00e7in bu <code>postgres<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7i\u015f yapmam\u0131z gerekir.<\/p>\n<p>\u0130lk olarak, <code>postgres<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7i\u015f yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres<\/code><\/pre>\n<p>Bu komut sizi <code>postgres<\/code> Linux kullan\u0131c\u0131s\u0131n\u0131n kabu\u011funa sokar. \u015eimdi <code>psql<\/code> komutunu kullanarak PostgreSQL komut sat\u0131r\u0131 istemcisine ba\u011flanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">psql<\/code><\/pre>\n<p><code>psql<\/code> istemine ba\u011fland\u0131ktan sonra, Django projeniz i\u00e7in \u00f6zel bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturaca\u011f\u0131z. Bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan iyi bir uygulamad\u0131r, \u00e7\u00fcnk\u00fc Django uygulaman\u0131z\u0131n <code>postgres<\/code> s\u00fcper kullan\u0131c\u0131s\u0131yla de\u011fil, yaln\u0131zca kendi veritaban\u0131na eri\u015fim yetkisi olan bir kullan\u0131c\u0131yla \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>\u00d6ncelikle, Django projeniz i\u00e7in bir veritaban\u0131 olu\u015ftural\u0131m. Veritaban\u0131 ad\u0131n\u0131 <code>myprojectdb<\/code> olarak varsayal\u0131m, ancak siz kendi projenize uygun bir isim se\u00e7ebilirsiniz:<\/p>\n<pre><code class=\"language-sql\">CREATE DATABASE myprojectdb;<\/code><\/pre>\n<p>Ard\u0131ndan, bu veritaban\u0131na eri\u015fecek bir kullan\u0131c\u0131 olu\u015ftural\u0131m. Kullan\u0131c\u0131 ad\u0131n\u0131 <code>myprojectuser<\/code> ve \u015fifreyi <code>your_password<\/code> olarak varsayal\u0131m. <strong>G\u00fc\u00e7l\u00fc bir \u015fifre se\u00e7ti\u011finizden emin olun!<\/strong><\/p>\n<pre><code class=\"language-sql\">CREATE USER myprojectuser WITH PASSWORD 'your_password';<\/code><\/pre>\n<p>\u015eimdi olu\u015fturdu\u011fumuz <code>myprojectuser<\/code> kullan\u0131c\u0131s\u0131na <code>myprojectdb<\/code> veritaban\u0131 \u00fczerinde t\u00fcm yetkileri verelim:<\/p>\n<pre><code class=\"language-sql\">GRANT ALL PRIVILEGES ON DATABASE myprojectdb TO myprojectuser;<\/code><\/pre>\n<p>Bu yetkilendirme, Django&#8217;nun veritaban\u0131 tablolar\u0131n\u0131 olu\u015fturmas\u0131na, de\u011fi\u015ftirmesine ve silmesine izin verecektir.<\/p>\n<p>Ek olarak, PostgreSQL&#8217;in baz\u0131 varsay\u0131lan ayarlar\u0131n\u0131 Django ile uyumlu hale getirmek i\u00e7in kullan\u0131c\u0131 rol\u00fcne baz\u0131 \u00f6zellikler ekleyebiliriz. Bu ayarlar, karakter kodlamas\u0131, i\u015flem izolasyonu ve zaman dilimi gibi \u00f6nemli parametreleri i\u00e7erir.<\/p>\n<pre><code class=\"language-sql\">ALTER ROLE myprojectuser SET client_encoding TO 'utf8';\nALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';\nALTER ROLE myprojectuser SET timezone TO 'UTC';<\/code><\/pre>\n<p>*   <code>client_encoding TO 'utf8'<\/code>: T\u00fcm karakterlerin UTF-8 olarak kodlanmas\u0131n\u0131 sa\u011flar, bu da T\u00fcrk\u00e7e karakterler ve di\u011fer uluslararas\u0131 karakter setleriyle uyumluluk i\u00e7in kritiktir.<br \/>\n*   <code>default_transaction_isolation TO 'read committed'<\/code>: Bu, bir i\u015flemin yaln\u0131zca onaylanm\u0131\u015f (committed) verileri g\u00f6rmesini sa\u011flar. Django&#8217;nun varsay\u0131lan davran\u0131\u015f\u0131yla uyumludur ve veri tutarl\u0131l\u0131\u011f\u0131 i\u00e7in iyi bir se\u00e7imdir.<br \/>\n*   <code>timezone TO 'UTC'<\/code>: Veritaban\u0131n\u0131n zaman dilimini UTC olarak ayarlar. Bu, farkl\u0131 co\u011frafi konumlardaki sunucular ve kullan\u0131c\u0131lar aras\u0131nda zaman tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak i\u00e7in en iyi uygulamad\u0131r.<\/p>\n<p>T\u00fcm bu komutlar\u0131 ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, <code>psql<\/code> isteminden \u00e7\u0131kmak i\u00e7in <code>\\q<\/code> yaz\u0131n ve Enter tu\u015funa bas\u0131n:<\/p>\n<pre><code class=\"language-sql\">\\q<\/code><\/pre>\n<p>\u015eimdi <code>postgres<\/code> Linux kullan\u0131c\u0131s\u0131n\u0131n kabu\u011fundan \u00e7\u0131kmak i\u00e7in <code>exit<\/code> yaz\u0131n ve Enter tu\u015funa bas\u0131n:<\/p>\n<pre><code class=\"language-bash\">exit<\/code><\/pre>\n<p>Art\u0131k Ubuntu sisteminizde PostgreSQL kuruldu ve Django projeniz i\u00e7in \u00f6zel bir veritaban\u0131 ile kullan\u0131c\u0131 haz\u0131r.<\/p>\n<h3>Django Projesini Haz\u0131rlama<\/h3>\n<p>\u015eimdi s\u0131ra Django projenizi PostgreSQL ile \u00e7al\u0131\u015facak \u015fekilde haz\u0131rlamaya geldi.<\/p>\n<h4>Sanal Ortam Olu\u015fturma<\/h4>\n<p>Python projelerinde sanal ortam kullanmak, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemek ve proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in en iyi uygulamad\u0131r. Projenizin k\u00f6k dizinine gidin ve bir sanal ortam olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">mkdir myproject_django # E\u011fer projeniz yoksa yeni bir dizin olu\u015fturun\ncd myproject_django\npython3 -m venv myproject_venv<\/code><\/pre>\n<p>Sanal ortam\u0131 etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">source myproject_venv\/bin\/activate<\/code><\/pre>\n<p>Terminal isteminizde parantez i\u00e7inde sanal ortam ad\u0131n\u0131 (<code>(myproject_venv)<\/code>) g\u00f6rmelisiniz, bu da sanal ortam\u0131n etkin oldu\u011funu g\u00f6sterir.<\/p>\n<h4>Django ve Psycopg2 Kurulumu<\/h4>\n<p>Django&#8217;nun PostgreSQL ile ileti\u015fim kurabilmesi i\u00e7in <code>psycopg2<\/code> adl\u0131 bir adapt\u00f6re ihtiyac\u0131 vard\u0131r. <code>psycopg2<\/code>, Python i\u00e7in pop\u00fcler bir PostgreSQL veritaban\u0131 ba\u011flay\u0131c\u0131s\u0131d\u0131r.<\/p>\n<p>Sanal ortam\u0131n\u0131z etkin durumdayken Django ve <code>psycopg2-binary<\/code> paketlerini kurun:<\/p>\n<pre><code class=\"language-bash\">pip install django psycopg2-binary<\/code><\/pre>\n<p><code>psycopg2-binary<\/code> paketi, kurulum s\u0131ras\u0131nda derleme gerektirmeyen \u00f6nceden derlenmi\u015f bir s\u00fcr\u00fcm\u00fcd\u00fcr ve \u00e7o\u011fu durumda kurulumu daha kolay hale getirir. E\u011fer derleme sorunlar\u0131 ya\u015farsan\u0131z veya daha \u00f6zel bir kurulum istiyorsan\u0131z <code>psycopg2<\/code> paketini kurmay\u0131 deneyebilirsiniz, ancak bu durumda sisteminizde PostgreSQL geli\u015ftirme ba\u015fl\u0131klar\u0131n\u0131n (<code>libpq-dev<\/code>) kurulu olmas\u0131 gerekir. (Bu konuya &#8220;Yayg\u0131n Sorunlar&#8221; b\u00f6l\u00fcm\u00fcnde de\u011finece\u011fiz.)<\/p>\n<h4>Yeni Bir Django Projesi Olu\u015fturma (Opsiyonel)<\/h4>\n<p>E\u011fer zaten bir Django projeniz varsa bu ad\u0131m\u0131 atlayabilirsiniz. Yeni bir proje olu\u015fturuyorsan\u0131z, sanal ortam\u0131n\u0131z etkin durumdayken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">django-admin startproject myproject .\npython manage.py startapp myapp # \u0130ste\u011fe ba\u011fl\u0131 olarak bir uygulama olu\u015fturun<\/code><\/pre>\n<p>Bu komutlar, bulundu\u011funuz dizine <code>myproject<\/code> ad\u0131nda yeni bir Django projesi ve <code>myapp<\/code> ad\u0131nda bir uygulama olu\u015fturur.<\/p>\n<h3>Django Ayarlar\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>\u015eimdi Django projenizin <code>settings.py<\/code> dosyas\u0131n\u0131 d\u00fczenleyerek PostgreSQL veritaban\u0131 ba\u011flant\u0131 bilgilerini tan\u0131mlayaca\u011f\u0131z.<\/p>\n<h4><code>settings.py<\/code> Dosyas\u0131n\u0131 D\u00fczenleme<\/h4>\n<p>Django projenizin k\u00f6k dizininde bulunan <code>myproject\/settings.py<\/code> dosyas\u0131n\u0131 favori metin d\u00fczenleyicinizle a\u00e7\u0131n.<\/p>\n<pre><code class=\"language-bash\">nano myproject\/settings.py # Veya vim, code vb.<\/code><\/pre>\n<p><code>DATABASES<\/code> s\u00f6zl\u00fc\u011f\u00fcn\u00fc bulun. Varsay\u0131lan olarak SQLite i\u00e7in yap\u0131land\u0131r\u0131lm\u0131\u015f olacakt\u0131r:<\/p>\n<pre><code class=\"language-python\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': BASE_DIR \/ 'db.sqlite3',\n    }\n}<\/code><\/pre>\n<p>Bu b\u00f6l\u00fcm\u00fc PostgreSQL ba\u011flant\u0131 bilgilerinizle de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-python\">DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'myprojectdb',         # PostgreSQL'de olu\u015fturdu\u011funuz veritaban\u0131 ad\u0131\n        'USER': 'myprojectuser',       # PostgreSQL'de olu\u015fturdu\u011funuz kullan\u0131c\u0131 ad\u0131\n        'PASSWORD': 'your_password',   # PostgreSQL kullan\u0131c\u0131n\u0131z\u0131n \u015fifresi\n        'HOST': 'localhost',           # PostgreSQL sunucusunun adresi (ayn\u0131 sunucuda ise 'localhost')\n        'PORT': '',                    # PostgreSQL varsay\u0131lan portu 5432'dir, bo\u015f b\u0131rakmak varsay\u0131lan\u0131 kullan\u0131r\n    }\n}<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <strong><code>ENGINE<\/code><\/strong>: <code>django.db.backends.postgresql<\/code> olarak ayarlanmal\u0131d\u0131r, bu Django&#8217;ya PostgreSQL adapt\u00f6r\u00fcn\u00fc kullanmas\u0131n\u0131 s\u00f6yler.<br \/>\n*   <strong><code>NAME<\/code><\/strong>: PostgreSQL&#8217;de olu\u015fturdu\u011funuz veritaban\u0131n\u0131n ad\u0131d\u0131r (\u00f6rne\u011fimizde <code>myprojectdb<\/code>).<br \/>\n*   <strong><code>USER<\/code><\/strong>: PostgreSQL&#8217;de olu\u015fturdu\u011funuz kullan\u0131c\u0131n\u0131n ad\u0131d\u0131r (\u00f6rne\u011fimizde <code>myprojectuser<\/code>).<br \/>\n*   <strong><code>PASSWORD<\/code><\/strong>: PostgreSQL kullan\u0131c\u0131n\u0131z i\u00e7in belirledi\u011finiz \u015fifredir (\u00f6rne\u011fimizde <code>your_password<\/code>). <strong>Bu \u015fifreyi \u00fcretim ortam\u0131nda do\u011frudan <code>settings.py<\/code> dosyas\u0131na yazmaktan ka\u00e7\u0131nmal\u0131s\u0131n\u0131z!<\/strong><br \/>\n*   <strong><code>HOST<\/code><\/strong>: PostgreSQL sunucusunun adresidir. E\u011fer PostgreSQL ayn\u0131 sunucuda \u00e7al\u0131\u015f\u0131yorsa <code>'localhost'<\/code> kullan\u0131n. Uzak bir sunucuda ise o sunucunun IP adresi veya alan ad\u0131n\u0131 girin.<br \/>\n*   <strong><code>PORT<\/code><\/strong>: PostgreSQL&#8217;in dinledi\u011fi port numaras\u0131d\u0131r. Varsay\u0131lan port 5432&#8217;dir. Genellikle bo\u015f b\u0131rakmak, Django&#8217;nun varsay\u0131lan portu kullanmas\u0131n\u0131 sa\u011flar. E\u011fer PostgreSQL farkl\u0131 bir portta \u00e7al\u0131\u015f\u0131yorsa, bu alan\u0131 doldurun.<\/p>\n<p>Dosyay\u0131 kaydedin ve kapat\u0131n.<\/p>\n<h4>G\u00fcvenlik Notu: Hassas Bilgileri Y\u00f6netme<\/h4>\n<p>Yukar\u0131daki \u00f6rnekte veritaban\u0131 \u015fifresini do\u011frudan <code>settings.py<\/code> dosyas\u0131na yazd\u0131k. Bu, geli\u015ftirme ortamlar\u0131 i\u00e7in kabul edilebilir olsa da, \u00fcretim ortamlar\u0131nda ciddi bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olu\u015fturur. \u015eifreler, API anahtarlar\u0131 gibi hassas bilgilerin versiyon kontrol sistemlerine (Git gibi) y\u00fcklenmemesi ve do\u011frudan kod i\u00e7inde saklanmamas\u0131 gerekir.<\/p>\n<p>Bunun yerine, ortam de\u011fi\u015fkenleri (environment variables) veya <code>django-environ<\/code>, <code>python-decouple<\/code> gibi paketler kullanarak bu bilgileri y\u00f6netmek en iyi uygulamad\u0131r.<\/p>\n<p><strong>\u00d6rnek (django-environ ile):<\/strong><\/p>\n<p>\u00d6nce <code>django-environ<\/code>&#8216;u kurun:<\/p>\n<pre><code class=\"language-bash\">pip install django-environ<\/code><\/pre>\n<p>Ard\u0131ndan <code>settings.py<\/code> dosyan\u0131z\u0131n en \u00fcst\u00fcne a\u015fa\u011f\u0131daki kodlar\u0131 ekleyin:<\/p>\n<pre><code class=\"language-python\">import environ\n\nenv = environ.Env(\n    # set casting, default value\n    DEBUG=(bool, False)\n)\n\n<h2>.env dosyas\u0131n\u0131 oku<\/h2>\nenviron.Env.read_env()\n\n<h2>... (DATABASES b\u00f6l\u00fcm\u00fcn\u00fc a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirin)<\/h2>\n\nDATABASES = {\n    'default': env.db(),\n}<\/code><\/pre>\n<p>Projenizin k\u00f6k dizininde <code>.env<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine veritaban\u0131 bilgilerinizi a\u015fa\u011f\u0131daki formatta yaz\u0131n:<\/p>\n<pre><code class=\"language-\">DATABASE_URL=postgres:\/\/myprojectuser:your_password@localhost:5432\/myprojectdb<\/code><\/pre>\n<p>Bu y\u00f6ntem, hassas bilgileri koddan ay\u0131r\u0131r ve daha g\u00fcvenli bir \u015fekilde y\u00f6netmenizi sa\u011flar.<\/p>\n<h3>Veritaban\u0131 Ge\u00e7i\u015flerini Uygulama<\/h3>\n<p><code>settings.py<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131rd\u0131ktan sonra, Django&#8217;nun veritaban\u0131 \u015femas\u0131n\u0131 PostgreSQL veritaban\u0131na uygulamam\u0131z gerekiyor.<\/p>\n<h4>Migrasyonlar\u0131 Olu\u015fturma<\/h4>\n<p>Django, modellerinizde yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri veritaban\u0131 \u015femas\u0131na yans\u0131tmak i\u00e7in migrasyon sistemini kullan\u0131r. \u0130lk olarak, Django&#8217;nun dahili uygulamalar\u0131 ve kendi olu\u015fturdu\u011funuz uygulamalar i\u00e7in migrasyon dosyalar\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">python manage.py makemigrations<\/code><\/pre>\n<p>Bu komut, Django modellerinizdeki de\u011fi\u015fikliklere dayanarak yeni migrasyon dosyalar\u0131 olu\u015fturur. E\u011fer yeni bir proje olu\u015fturduysan\u0131z, Django&#8217;nun varsay\u0131lan uygulamalar\u0131 (admin, auth, sessions vb.) i\u00e7in migrasyon dosyalar\u0131n\u0131 olu\u015fturdu\u011funu g\u00f6receksiniz.<\/p>\n<h4>Migrasyonlar\u0131 Uygulama<\/h4>\n<p>Olu\u015fturulan migrasyon dosyalar\u0131n\u0131 PostgreSQL veritaban\u0131n\u0131za uygulamak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">python manage.py migrate<\/code><\/pre>\n<p>Bu komut, migrasyon dosyalar\u0131nda tan\u0131mlanan t\u00fcm veritaban\u0131 \u015fema de\u011fi\u015fikliklerini PostgreSQL veritaban\u0131n\u0131za uygular. Bu i\u015flem s\u0131ras\u0131nda, Django, <code>myprojectdb<\/code> veritaban\u0131nda gerekli tablolar\u0131 olu\u015fturacak ve varsay\u0131lan verileri ekleyecektir. E\u011fer bu ad\u0131mda bir hata al\u0131rsan\u0131z, genellikle veritaban\u0131 ba\u011flant\u0131 bilgilerinizde (kullan\u0131c\u0131 ad\u0131, \u015fifre, veritaban\u0131 ad\u0131, host) bir yanl\u0131\u015fl\u0131k vard\u0131r. Hata mesajlar\u0131n\u0131 dikkatlice inceleyin.<\/p>\n<h4>S\u00fcper Kullan\u0131c\u0131 Olu\u015fturma<\/h4>\n<p>Django admin paneline eri\u015fmek i\u00e7in bir s\u00fcper kullan\u0131c\u0131 hesab\u0131 olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">python manage.py createsuperuser<\/code><\/pre>\n<p>Bu komut sizden bir kullan\u0131c\u0131 ad\u0131, e-posta adresi (iste\u011fe ba\u011fl\u0131) ve \u015fifre isteyecektir. Bu bilgilerle admin paneline giri\u015f yapabileceksiniz.<\/p>\n<h3>Django Uygulamas\u0131n\u0131 Test Etme<\/h3>\n<p>\u015eimdi her \u015feyin d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in Django geli\u015ftirme sunucusunu ba\u015flat\u0131p test edelim.<\/p>\n<h4>Geli\u015ftirme Sunucusunu Ba\u015flatma<\/h4>\n<p>Sanal ortam\u0131n\u0131z etkin durumdayken, Django geli\u015ftirme sunucusunu ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">python manage.py runserver 0.0.0.0:8000<\/code><\/pre>\n<p><code>0.0.0.0:8000<\/code> kullanmak, sunucunun t\u00fcm a\u011f aray\u00fczlerinde dinlemesini sa\u011flar. Bu, sunucuyu uzaktan eri\u015filebilir hale getirir (g\u00fcvenlik duvar\u0131 ayarlar\u0131n\u0131z izin veriyorsa). Yaln\u0131zca yerel eri\u015fim i\u00e7in <code>python manage.py runserver<\/code> komutunu kullanabilirsiniz.<\/p>\n<h4>Taray\u0131c\u0131dan Kontrol Etme<\/h4>\n<p>Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>http:\/\/127.0.0.1:8000\/admin\/<\/code> adresine gidin.<\/p>\n<p>Daha \u00f6nce <code>createsuperuser<\/code> komutuyla olu\u015fturdu\u011funuz kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile giri\u015f yapmay\u0131 deneyin. Ba\u015far\u0131l\u0131 bir \u015fekilde giri\u015f yapabiliyorsan\u0131z ve admin panelini g\u00f6rebiliyorsan\u0131z, Django uygulaman\u0131z\u0131n PostgreSQL veritaban\u0131 ile ba\u015far\u0131l\u0131 bir \u015fekilde ileti\u015fim kurdu\u011funu ve veritaban\u0131 \u015femas\u0131n\u0131n do\u011fru bir \u015fekilde uyguland\u0131\u011f\u0131n\u0131 g\u00f6stermektedir.<\/p>\n<p>Ek olarak, basit bir model olu\u015fturup veritaban\u0131na veri ekleyerek ba\u011flant\u0131y\u0131 daha da test edebilirsiniz:<\/p>\n<p>1.  <code>myapp\/models.py<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve basit bir model ekleyin:<\/p>\n<pre><code class=\"language-python\"># myapp\/models.py\n    from django.db import models\n\n    class Product(models.Model):\n        name = models.CharField(max_length=200)\n        description = models.TextField()\n        price = models.DecimalField(max_digits=10, decimal_places=2)\n        created_at = models.DateTimeField(auto_now_add=True)\n\n        def __str__(self):\n            return self.name<\/code><\/pre>\n<p>2.  <code>myapp\/admin.py<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve modeli admin panelinde g\u00f6r\u00fcn\u00fcr hale getirin:<\/p>\n<pre><code class=\"language-python\"># myapp\/admin.py\n    from django.contrib import admin\n    from .models import Product\n\n    admin.site.register(Product)<\/code><\/pre>\n<p>3.  <code>myproject\/settings.py<\/code> dosyas\u0131nda <code>myapp<\/code> uygulamas\u0131n\u0131n <code>INSTALLED_APPS<\/code> listesinde oldu\u011fundan emin olun.<\/p>\n<p>4.  Migrasyonlar\u0131 tekrar olu\u015fturun ve uygulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">python manage.py makemigrations myapp\n    python manage.py migrate<\/code><\/pre>\n<p>5.  Geli\u015ftirme sunucusunu yeniden ba\u015flat\u0131n (<code>python manage.py runserver<\/code>).<\/p>\n<p>6.  Admin paneline (<code>http:\/\/127.0.0.1:8000\/admin\/<\/code>) gidin ve &#8220;Products&#8221; b\u00f6l\u00fcm\u00fcn\u00fc bulun. Buradan yeni bir \u00fcr\u00fcn eklemeyi deneyin. E\u011fer ba\u015far\u0131l\u0131 olursa, Django uygulaman\u0131z\u0131n PostgreSQL ile tam entegrasyonu tamamlanm\u0131\u015f demektir.<\/p>\n<h3>Yayg\u0131n Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Kurulum s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<h4><code>psycopg2<\/code> Kurulum Hatas\u0131<\/h4>\n<p>E\u011fer <code>pip install psycopg2-binary<\/code> komutuyla bile <code>psycopg2<\/code> kurulumunda hata al\u0131yorsan\u0131z, genellikle sisteminizde PostgreSQL geli\u015ftirme ba\u015fl\u0131klar\u0131 eksiktir. Bu ba\u015fl\u0131klar, <code>psycopg2<\/code>&#8216;nin C uzant\u0131lar\u0131n\u0131 derlemesi i\u00e7in gereklidir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> Gerekli geli\u015ftirme paketlerini kurun:<\/p>\n<pre><code class=\"language-bash\">sudo apt install libpq-dev python3-dev<\/code><\/pre>\n<p><code>libpq-dev<\/code>, PostgreSQL istemci kitapl\u0131klar\u0131n\u0131 ve ba\u015fl\u0131k dosyalar\u0131n\u0131 sa\u011flar. <code>python3-dev<\/code> ise Python C uzant\u0131lar\u0131n\u0131 derlemek i\u00e7in gerekli Python ba\u015fl\u0131klar\u0131n\u0131 sa\u011flar. Bu paketleri kurduktan sonra <code>pip install psycopg2<\/code> veya <code>pip install psycopg2-binary<\/code> komutunu tekrar deneyin.<\/p>\n<h4>Ba\u011flant\u0131 Hatas\u0131 (OperationalError)<\/h4>\n<p><code>psycopg2.OperationalError: could not connect to server: Connection refused<\/code> veya benzeri bir hata al\u0131yorsan\u0131z, bu genellikle Django&#8217;nun PostgreSQL sunucusuna ba\u011flanamad\u0131\u011f\u0131 anlam\u0131na gelir.<\/p>\n<p><strong>Olas\u0131 Nedenler ve \u00c7\u00f6z\u00fcmleri:<\/strong><\/p>\n<p>*   <strong>PostgreSQL Servisi \u00c7al\u0131\u015fm\u0131yor:<\/strong> PostgreSQL servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status postgresql\n    sudo systemctl start postgresql # E\u011fer \u00e7al\u0131\u015fm\u0131yorsa<\/code><\/pre>\n<p>*   <strong>Yanl\u0131\u015f Veritaban\u0131 Bilgileri:<\/strong> <code>settings.py<\/code> dosyas\u0131ndaki <code>NAME<\/code>, <code>USER<\/code>, <code>PASSWORD<\/code>, <code>HOST<\/code>, <code>PORT<\/code> bilgilerini dikkatlice kontrol edin. Veritaban\u0131 ad\u0131, kullan\u0131c\u0131 ad\u0131 ve \u015fifrenin PostgreSQL&#8217;de olu\u015fturdu\u011funuz bilgilerle tam olarak e\u015fle\u015fti\u011finden emin olun.<br \/>\n*   <strong><code>HOST<\/code> Ayar\u0131:<\/strong> E\u011fer PostgreSQL ayn\u0131 sunucuda \u00e7al\u0131\u015f\u0131yorsa <code>HOST<\/code> <code>'localhost'<\/code> olmal\u0131d\u0131r. E\u011fer uzak bir sunucuda ise, o sunucunun IP adresi veya alan ad\u0131 olmal\u0131d\u0131r.<br \/>\n*   <strong><code>pg_hba.conf<\/code> Ayarlar\u0131:<\/strong> \u00d6zellikle uzak bir sunucudan ba\u011flanmaya \u00e7al\u0131\u015f\u0131yorsan\u0131z, PostgreSQL&#8217;in ba\u011flant\u0131 izinlerini tan\u0131mlayan <code>pg_hba.conf<\/code> dosyas\u0131n\u0131 kontrol etmeniz gerekebilir. Varsay\u0131lan olarak, yerel ba\u011flant\u0131lar genellikle <code>peer<\/code> veya <code>md5<\/code> kimlik do\u011frulamas\u0131 ile izin verilir. Uzak ba\u011flant\u0131lar i\u00e7in genellikle <code>md5<\/code> veya <code>scram-sha-256<\/code> ile bir giri\u015f eklemeniz gerekir.<br \/>\n    Dosya genellikle <code>\/etc\/postgresql\/14\/main\/pg_hba.conf<\/code> yolunda bulunur (s\u00fcr\u00fcm numaras\u0131 farkl\u0131l\u0131k g\u00f6sterebilir).<br \/>\n    \u00d6rnek bir uzak ba\u011flant\u0131 giri\u015fi:<\/p>\n<pre><code class=\"language-\">host    myprojectdb     myprojectuser   0.0.0.0\/0               md5<\/code><\/pre>\n<p>    Bu, <code>myprojectdb<\/code> veritaban\u0131na <code>myprojectuser<\/code> kullan\u0131c\u0131s\u0131n\u0131n herhangi bir IP adresinden <code>md5<\/code> \u015fifrelemesi ile ba\u011flanmas\u0131na izin verir. De\u011fi\u015fiklik yapt\u0131ktan sonra PostgreSQL servisini yeniden ba\u015flatmay\u0131 unutmay\u0131n: <code>sudo systemctl restart postgresql<\/code>.<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131:<\/strong> E\u011fer Ubuntu sunucunuzda bir g\u00fcvenlik duvar\u0131 (\u00f6rn. UFW) etkinse, PostgreSQL&#8217;in varsay\u0131lan portu olan 5432&#8217;nin gelen ba\u011flant\u0131lara a\u00e7\u0131k oldu\u011fundan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 5432\/tcp<\/code><\/pre>\n<h4>Karakter Kodlama Sorunlar\u0131<\/h4>\n<p>Veritaban\u0131na T\u00fcrk\u00e7e karakterler veya di\u011fer \u00f6zel karakterler eklerken sorun ya\u015f\u0131yorsan\u0131z, bu genellikle karakter kodlama ayarlar\u0131yla ilgilidir.<\/p>\n<p><strong>\u00c7\u00f6z\u00fcm:<\/strong> PostgreSQL kullan\u0131c\u0131n\u0131z\u0131 olu\u015ftururken veya sonras\u0131nda <code>ALTER ROLE myprojectuser SET client_encoding TO 'utf8';<\/code> komutunu kulland\u0131\u011f\u0131m\u0131zdan emin olun. Ayr\u0131ca, Django <code>settings.py<\/code> dosyan\u0131zda varsay\u0131lan kodlaman\u0131n UTF-8 oldu\u011fundan emin olun (Django varsay\u0131lan olarak UTF-8 kullan\u0131r, ancak kontrol etmekte fayda var).<\/p>\n<h3>Ek G\u00fcvenlik ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Django uygulaman\u0131z\u0131 PostgreSQL ile \u00fcretim ortam\u0131nda kullan\u0131rken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 ek g\u00fcvenlik ve performans ipu\u00e7lar\u0131:<\/p>\n<h4>Veritaban\u0131 Kullan\u0131c\u0131 Yetkileri<\/h4>\n<p>Olu\u015fturdu\u011funuz <code>myprojectuser<\/code> kullan\u0131c\u0131s\u0131na yaln\u0131zca ihtiyac\u0131 olan yetkileri verin. <code>GRANT ALL PRIVILEGES<\/code> yerine, yaln\u0131zca <code>SELECT<\/code>, <code>INSERT<\/code>, <code>UPDATE<\/code>, <code>DELETE<\/code> gibi belirli yetkileri vermek daha g\u00fcvenlidir. Ancak Django&#8217;nun migrasyonlar\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131 ve tablolar\u0131 olu\u015fturmas\u0131 i\u00e7in genellikle daha geni\u015f yetkilere ihtiyac\u0131 vard\u0131r. Geli\u015ftirme ve \u00fcretim ortamlar\u0131 i\u00e7in farkl\u0131 yetki setleri d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri ile Hassas Bilgileri Y\u00f6netme<\/h4>\n<p>Daha \u00f6nce bahsedildi\u011fi gibi, veritaban\u0131 \u015fifreleri, API anahtarlar\u0131 ve <code>SECRET_KEY<\/code> gibi hassas bilgileri do\u011frudan <code>settings.py<\/code> dosyas\u0131na yazmaktan ka\u00e7\u0131n\u0131n. <code>django-environ<\/code> veya <code>python-decouple<\/code> gibi k\u00fct\u00fcphaneler kullanarak bu bilgileri ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netin. Bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik bir ad\u0131md\u0131r.<\/p>\n<h4>Veritaban\u0131 Yedekleme<\/h4>\n<p>Veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in d\u00fczenli olarak PostgreSQL veritaban\u0131n\u0131z\u0131n yedeklerini al\u0131n. <code>pg_dump<\/code> komutu, PostgreSQL veritabanlar\u0131n\u0131 yedeklemek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<pre><code class=\"language-bash\">pg_dump -U myprojectuser -h localhost myprojectdb > myprojectdb_backup.sql<\/code><\/pre>\n<p>Bu komut, <code>myprojectdb<\/code> veritaban\u0131n\u0131 <code>myprojectuser<\/code> kullanarak <code>myprojectdb_backup.sql<\/code> dosyas\u0131na yedekler. Yedekleri farkl\u0131 bir konuma veya bulut depolama hizmetine kaydetmeyi unutmay\u0131n.<\/p>\n<h4>Performans Optimizasyonu<\/h4>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e veritaban\u0131 performans\u0131n\u0131 optimize etmek \u00f6nemli hale gelecektir:<\/p>\n<p>*   <strong>\u0130ndeksler:<\/strong> S\u0131k\u00e7a sorgulanan s\u00fctunlara uygun indeksler ekleyerek sorgu performans\u0131n\u0131 art\u0131r\u0131n. Django&#8217;da modellerinizde <code>db_index=True<\/code> veya <code>indexes<\/code> se\u00e7ene\u011fini kullanarak indeksler tan\u0131mlayabilirsiniz.<br \/>\n*   <strong>Sorgu Optimizasyonu:<\/strong> N+1 sorgu sorunlar\u0131 gibi yayg\u0131n performans sorunlar\u0131ndan ka\u00e7\u0131nmak i\u00e7in <code>select_related()<\/code> ve <code>prefetch_related()<\/code> gibi Django ORM \u00f6zelliklerini kullan\u0131n.<br \/>\n*   <strong>Ba\u011flant\u0131 Havuzu (Connection Pooling):<\/strong> Y\u00fcksek trafikli uygulamalar i\u00e7in <code>pgBouncer<\/code> gibi bir ba\u011flant\u0131 havuzu arac\u0131 kullanarak veritaban\u0131 ba\u011flant\u0131lar\u0131n\u0131n y\u00f6netimini optimize edebilirsiniz.<br \/>\n*   <strong>Veritaban\u0131 \u0130zleme:<\/strong> PostgreSQL loglar\u0131n\u0131 izleyerek veya \u00f6zel izleme ara\u00e7lar\u0131 kullanarak yava\u015f sorgular\u0131 ve performans darbo\u011fazlar\u0131n\u0131 tespit edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Django uygulaman\u0131z\u0131 Ubuntu 22.04 \u00fczerinde PostgreSQL veritaban\u0131 ile nas\u0131l entegre edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frendiniz. PostgreSQL&#8217;in kurulumundan, Django projenizin ayarlar\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131na, migrasyonlar\u0131n uygulanmas\u0131na ve uygulaman\u0131n test edilmesine kadar t\u00fcm s\u00fcre\u00e7leri detayl\u0131 bir \u015fekilde ele ald\u0131k. Ayr\u0131ca, kar\u015f\u0131la\u015fabilece\u011finiz yayg\u0131n sorunlara \u00e7\u00f6z\u00fcmler sunduk ve \u00fcretim ortam\u0131 i\u00e7in \u00f6nemli g\u00fcvenlik ve performans ipu\u00e7lar\u0131n\u0131 payla\u015ft\u0131k.<\/p>\n<p>PostgreSQL&#8217;in g\u00fcc\u00fc ve esnekli\u011fi ile Django&#8217;nun h\u0131zl\u0131 geli\u015ftirme yeteneklerini birle\u015ftirerek, g\u00fcvenilir, \u00f6l\u00e7eklenebilir ve performansl\u0131 web uygulamalar\u0131 olu\u015fturabilirsiniz. Art\u0131k Django projelerinizde SQLite&#8217;\u0131n \u00f6tesine ge\u00e7erek ger\u00e7ek d\u00fcnya \u00fcretim ortamlar\u0131na haz\u0131r, g\u00fc\u00e7l\u00fc bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc kullanmaya haz\u0131rs\u0131n\u0131z. Unutmay\u0131n, iyi bir geli\u015ftirici olmak s\u00fcrekli \u00f6\u011frenmeyi ve en iyi uygulamalar\u0131 takip etmeyi gerektirir. Django ve PostgreSQL d\u00fcnyas\u0131nda ke\u015ffedilecek daha bir\u00e7ok \u015fey var!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi\nDjango, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmeni","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-36002","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>Django Uygulamalar\u0131n\u0131zda PostgreSQL&#039;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#039;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#039;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmeni\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-06T13:40:43+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi\",\"datePublished\":\"2025-12-06T13:40:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\"},\"wordCount\":3039,\"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\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\",\"name\":\"Django Uygulamalar\u0131n\u0131zda PostgreSQL'i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-06T13:40:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi\"}]},{\"@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":"Django Uygulamalar\u0131n\u0131zda PostgreSQL'i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Django Uygulamalar\u0131n\u0131zda PostgreSQL'i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi","og_description":"Django Uygulamalar\u0131n\u0131zda PostgreSQL'i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi Django, Python ile h\u0131zl\u0131 ve verimli web uygulamalar\u0131 geli\u015ftirmeni","og_url":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-06T13:40:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi","datePublished":"2025-12-06T13:40:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/"},"wordCount":3039,"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\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/","name":"Django Uygulamalar\u0131n\u0131zda PostgreSQL'i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-06T13:40:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarinizda-postgresqli-ubuntu-22-04-uzerinde-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Django Uygulamalar\u0131n\u0131zda PostgreSQL&#8217;i Ubuntu 22.04 \u00dczerinde Kullanma Rehberi"}]},{"@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\/36002","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=36002"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36002\/revisions"}],"predecessor-version":[{"id":36003,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36002\/revisions\/36003"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}