Ãrnek olarak, SuSE 7.X sürümünde YaST uygulamasını çalıÅtırarak PostgreSQL i kurabilirsiniz:
PostgreSQLÂi bir üst sürümüne yükseltmeden önce eski paketleri kaldırmanız önerilir. (Tabii ki sadece bir öneri J )
           [root@localhost root]#rpm ÂFvh paket_adi
ile de yükseltme yapabiliriz.Burada öncelikle dikkat edilmesi gereken, öncelikle postgresql-libs paketinin upgrade edilmesidir.
PostgreSQL kurulumunda ne yazık ki bir standart bulunmamaktadır.
PostgreSQL kurulumu uygulamalar (applications), yardımcı programlar (utilities) ve veri dizinlerinden (data directories) oluÅur. Ana PostgreSQL uygulamaları (postmaster ve postgres) istemcilerden veri eriÅimini saÄlayan servislerin sunucu tarafındaki kodunu içerirler.
pg_ctl gibi yardımcı uygulamalar sunucunun aktif olduÄu tüm anlardaki ana sunucu iÅlemlerini (master server processes) kontrol etmekte kullanılır. Data dizini ise PostgreSQL taradından bir veritabanı için gereken tüm datayı, kayıtları, tabloları ve sistem parametrelerini tutmak için kullanılır.
Tipik bir PostgreSQL kurulumu tüm bu bileÅenleri bulundurur. PostgreSQL, genel olarak /usr/local/pgsql dizinine kurulur. Bu dizin, kaynak koddan kurarken varsayılan dizindir. RPMÂden kurarken ise /var/lib/pgsql dizini kullanılır.
Ana PostgreSQL dizininin alt dizinleri de aÅaÄıdaki gibidir:
bin |
pg_ctl,postmaster,psql gibi program ve yardımcı uygulamalar |
data |
Veritabanı |
doc |
HTML biçiminde belgeler |
include |
PostgreSQL uygulamalarında development için header dosyaları |
lib |
PostgreSQL uygulamalarında development için gereken kütüphaneler |
man |
PostgreSQL araçları için manual dosyaları |
share |
Ãrnek yapılandırma dosyaları |
Verimlilik ve yönetim kolaylıÄı açısından, deÄiÅik kategorilerdeki dosyalar deÄiÅik yerlere konulabilir. PostgreSQL bize bu esnekliÄi saÄlamaktadır. Ãrnek olarak, SuSE ve RedHatÂta PostgreSQL uygulamaları /usr/bin, log dosyası /var/log/postgresql, veri ise /var/lib/pgsql/data dizinlerine yerleÅtirilir. Bu, özellikle yedek alırken iÅe yarar. Gereksiz dosyaların yedeÄini almak durumunda kalmazsınız.
Her bir daÄıtım kendi dosya Åemasını oluÅturacaktır. Bunu görmek için RPM uygulamasını, tek bir paketin nereye hangi dosyaları koyduÄunu görmek için kullanabiliriz:
[root@localhost root]#Â rpm -ql postgresql
/usr/bin/createdb
...
/usr/share/man/man1/vacuum.l.gz
Alternatif olarak, kpackage gibi grafik arayüzlü programları bu iŠiçin kullanabilirsiniz.
RPM kurulumundaki dezavantajlardan biri, neyi nereye kurduÄunu tam olarak bilememektir. Dolayısıyla bazen kaynak koddan kurmak daha iyi sonuçlar verebilir.
Kaynak koddan kurma
          Â
EÄer Windows, Unix kullanıyor, ya da kullandıÄınız Linıx daÄıtımında rpm kullanamıyorsanız, PostgreSQL i kaynak kodundan kurabilirsiniz.
Bu yazı ve seminerin içeriÄi gereÄi PostgreSQLÂin NT çekirdekli Windows sürümlerine kurulumları anlatılmayacaktır. Ancak yakın zamanda http://seminer.devrim.oper.metu.edu.tr adresinde bu bilgileri de bulabilirsiniz. Ãzelllikle Windows ortamında çalıÅmak durumunda olan geliÅtiriciler için uygun bir yazı olacaktır.
PostgreSQLÂin kaynak kodunu http://www.postgresql.org ya da herhangi bir yansısından indirebilirsiniz. Ãlkemizde ftp.gazi.edu.tr adresi PostgreSQLÂin resmi yansısıdır. ODTà içinden ftp.oper.metu.edu.tr adresinde de son sürümleri bulabilirsiniz. Ana sitede beta ve test sürümlerini de bulmanız olasıdır. EÄer önemli veriler saklayacaksanız stable sürümleri tercih etmeniz gerekecektir.
Kaynak kod iki farklı Åekilde indirilebilir:
           - Tüm kodlar bir arada (postgresql-7.1.3.tar.gz)
 (Bu yazı hazırlanırken 8,124,455 Byte)[DG1]
- Ya da , postgresql-base
             postgresql-docs
             postgresql-support
             postgresql-test
 dosyalarını ayrı ayrı indirebilirsiniz.
PostgreSQL i derlemek, herhangi bir Açık Kod yazılımı derlemek kadar kolaydır.
Kaynak kodu derlemek için , Linux ya da Unix sisteminizde development için gereken uygulamaların kurulmuÅ olması gerekir. Bunlar C derleyicisini, make uygulamasını ve veritabanı yaratmak için gereken diÄer uygulamaları kapsar. Linux daÄıtımları genellikle Free Software Foundation' ın development ortamı için GNU uygulamaları ile gelir. Bunlar GNU C derleyicisi (gcc) 'yi içerir (Linux için standart derleyicidir). GNU uygulamaları tüm UNIX platformları için indirilebilir, ve PostgreSQL kurulumları için de önerilir.
Kaynak kodu indirip, derlemeniz için uygun bir dizine açınız. Bu dizinin PostgreSQL'in planladıÄınız çalıÅma dizini olmasına gerek yoktur. Åimdi, "tarball" ı extract ediniz:
[lkduser@localhost lkduser]# tar zxvf postgresql-7.1.3.tar.gz
Genellikle /usr/src dizini, kaynak kodların açılması için tercih edilir, ama yeterli disk alanınız olan her yere açmanız mümkündür. Ä°lk anda 37 MB, toplamda da yaklaÅık 50 MB'lık yere gereksinmeniz olacaktır.
Extract iÅlemi bittikten sonra yeni bir dizin yaratılmıŠolur; bu dizinin adı da sürüme baÄlı olarak deÄiÅir:
[lkduser@localhost lkduser]# cd postgresql-7.1.3
Dizin içindeki INSTALL dosyası içinde detaylı olarak kurulum bilgileri bulunur.
configure scripti , build iÅlemini yönlendirir. Sistemin özelliklerine baÄlı parametrelerini oluÅturur. Tüm varsayılan deÄerleri kullanmak istiyorsanız bu scripti parametresiz olarak çalıÅtırmanız yeterlidir.
           [lkduser@localhost postgresql-7.1.3]# ./configure
creating cache ./config.cache
checking host system type... i686-pc-linux-gnu
checking which template to use... linux
...
creating src/include/config.h
linking ./src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c
linking ./src/backend/port/dynloader/linux.h to src/include/dynloader.h
linking ./src/include/port/linux.h to src/include/os.h
linking ./src/makefiles/Makefile.linux to src/Makefile.port
linking ./src/backend/port/tas/dummy.s to src/backend/port/tas.s
[lkduser@localhost postgresql-7.1.3]#
configure scripti yazılımın build edildiÄi yolları kontrol eden deÄiÅkenleri, üzerinde çalıÅtıÄınız platformun tipini ve C derleyicinizin özelliklerini dikkate alarak hazırlar. Scriptin bu yönü ile ilgilenmemize gerek yoktur.
Script aynı zamanda kurulum için dizinleri de ayarlar. Varsayılan PostgreSQL kurulum dizini /usr/local/pgsql 'dir.
Configure scriptine vereceÄiniz parametreler ile bu varsayılan deÄerleri deÄiÅtirebilirsiniz.
--prefix=PREFIX |
Dizinleri PREFIX dizini altına açar.. PostgreSQL için varsayılan dizin /usr/local/pgsql dir. |
--bindir=DIR |
Programları DIR dizinine kurar.Varsayılan, PREFIX/bin dizinidir. |
configure scriptine verebileceÄiniz tüm parametrelerin listesini görmek için scripte --help parametresini verebilirsiniz:
[lkduser@localhost postgresql-7.1.3]# ./configure --help
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
 --cache-file=FILE      cache test results in FILE
...
[lkduser@localhost postgresql-7.1.3]#
Veritabanı dosyaları ve log dosyası için bu aÅamada bir dizin belirtmiyoruz. Bu dizinleri kurulumdan sonra PostgreSQL i baÅlattıÄımızda verebiliriz.
Derleme configure edildikten sonra make uygulamasını çalıÅtırmak gerekir.
NOT: PostgreSQL build iÅlemi , derleme iÅlemini kontrol edebilmek için birkaç tane Makefile kullanır. Bunun nedenle, make'in GNU sürümünün kullanılması önerilir. Bu, Linux daÄıtımlarında varsayılandır. DiÄer UNIX platformlarında GNU make uygulamasını ayrı olarak kurmanız gerekebilir. make ile GNU make ' i ayırmak için GNU make 'e gmake adı verilmiÅtir. AÅaÄıdaki yönergeler GNU make içindir.
[lkduser@localhost postgresql-7.1.3]# make
...
All of PostgreSQL successfully made. Ready to install.
EÄer herÅey yolunda giderse yukarıdaki mesajı alacaksınız.
Make bittiÄinde, derlenmiÅ programları yerlerine koymak gerekir. Bunun için öncelikle super user (root) olmak gerekir. Ardından da make install komutu verilir.
           Â[lkduser@localhost postgresql-7.1.3]# su
[root@localhost postgresql-7.1.3]# make install
...
Thank you for choosing PostgreSQL, the most advanced open source database engine.
[root@localhost root]# exit
[lkduser@localhost postgresql-7.1.3]#
Artık PostgreSQL veritabanı sunucusunu çalıÅtırmak için gereken programlar sistemimizde!
Ãnceki bölümde anlatılan RPM kurulumu ile aynı noktaya geldik. Åimdi sıra PostgreSQL' i baÅlatmaya geldi. Bu baÅlatma iÅlemi RPM ya da kaynak koddan kurmaya baÄlı olarak deÄiÅiklikler gösterir. RPM kurulumunda kaynak koddan yapılmıŠkurulumlardaki çalıÅtırma basamaklarının çoÄu halledilir. Ãncelikle RPM kurulumunu, sonra da kaynak koddan kurulumu çalıÅtıralım:
1.RPMÂ den kurulumda PostgreSQL i baÅlatma
PostgreSQLÂi RPM den kurduÄunuzda kaynak koddan kuruluma göre çoÄu iÅlemi yapmanıza gerek kalmaz: postgres kullanıcısı, data dizini vb yaratılır ve baÅlatma scripti oluÅturulur. Sadece ntsysv ile sisteminiz her baÅladıÄında PostgreSQLÂin baÅlamasını saÄlamanız gerekir.
Ä°lk çalıÅtırma sırasındasında da initialization iÅlemi yapılacaktır. Dolayısıyla initdb ile veritabanını initialize etmenize gerek kalmayacaktır.
Â
Ä°ki kurulumda da pg_hba.conf dosyasının düzenlenmesi aynı Åekildedir. Bu dosya ile ilgili bilgiler sonraki kısımda anlatılacaÄı için bu kısımda tekrarlanmayacaktır.
Ãncelikle PostgreSQL in initialize iÅlemi için sunucumuzu baÅlatalım:
[root@localhost root]# /etc/rc.d/init.d/postgresql start
Initializing database:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â [Â OKÂ ]
Starting postgresql service:Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â [Â OKÂ ]
Ardından /var/lib/pgsql/data dizinine geçelim. Az önceki init iÅleminden sonra bu dizinde bazı dosyalar oluÅacaktır:
[root@localhost root]# cd /var/lib/pgsql/data/
[root@localhost data]# ls
base global pg_hba.conf pg_ident.conf PG_VERSION pg_xlog postgresql.conf postmaster.opts postmaster.pid
Buradaki postgresql.conf dosyasını aÅaÄıdaki Åekilde düzenleyelim.
tcpip_socket = true
max_connections = 32 # 1-1024
port = 6879
#
#Â Â Â Â Â Â Performance
#
sort_mem = 512
shared_buffers = 2*max_connections # min 16
PostmasterÂin deÄiÅik seçenekleri vardır:
Bu seçenekler 7.0.x sürümlerinde kullanılıyordu. 7.1 ile birlikte postmaster.opts içine yazılan bu seçenekler postgresql.conf dosyası içine taÅındı. (Not: Kaynak koddan kurulumda bu parametreler yine kullanılmaktadır.)Â
Åimdi, postgres kullanıcısı dıÅında bir postgres kullanıcısı yaratalım.
NOT : Güvenlik nedeni ile sunucu iÅlemlerinini kesinlikle root olarak yapmamalısınız. Tüm iÅlemler postgres kullanıcısı kullanılarak yapılmalıdır. Olası bir sorunda, system dıÅından birisi root eriÅimi kazanabilir.Bu nedenle, postmaster root olarak çalıÅtırılamayacaktır.
Güvenlik açısından root a (ya da idÂsi 0 olan baÅka kullanıcı varsa onlara) postgres izninin verilmemesi gerekir. Varsayılan olarak root baÅlangıçta postgres kullanıcısı deÄildir ve postmaster i baÅlatamaz:
          Â
[root@localhost data]# psql template1
psql: FATAL 1:Â user "root" does not exist
[root@localhost root]# postgres
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged userid to prevent
a possible system security compromise. See the INSTALL file for
more information on how to properly start the server.
Sistemimizdeki lkduser gerçek kullanıcısına postgres hakkı verelim:
[root@localhost data]# su - postgres
bash-2.05$ createuser lkduser
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
bash-2.05$ exit
logout
[root@localhost root]#
PostgreSQL init edildiÄinde template0 ve template1 veritabanlarını oluÅturur. Ä°lk baÄlantı için bu veritabanları kullanılabilir. psql ile baÄlandıktan sonra \l ile sistemde olan veritabanlarını görebiliriz:
[root@localhost data]# su - lkduser
[lkduser@localhost lkduser]$ psql template1
Welcome to psql, the PostgreSQL interactive terminal.
Type:Â \copyright for distribution terms
      \h for help with SQL commands
      \? for help on internal slash commands
      \g or terminate with semicolon to execute query
      \q to quit
template1=> \l
       List of databases
 Database | Owner  | Encoding
-----------+----------+-----------
 template0 | postgres | SQL_ASCII
 template1 | postgres | SQL_ASCII
(2 rows)
[lkduser@localhost lkduser]$exit
postgresql.conf içinde yapılan her deÄiÅiklikten sonra bnu deÄiÅikliklerin geçerli olması için PostgreSQLÂin yeniden baÅlatılması gerekir.
2.Kaynak koddan kurulumda PostgreSQL i baÅlatma
PostgreSQL için ana veritabanı iÅlemi postmaster dir. Tüm kullanıcıların tüm veritabanlarındaki verilere eriÅimini yönetir. Kullanıcıların kendi veritabanlarına eriÅiminden ve baÅka kullanıcıların bilgilerine eriÅmesini engellemekten sorumludur. Bunun için tüm veri dosyalarının sahibi olmalıdır- hiç bir kullanıcı herhangi bir dosyaya direk olarak eriÅemez.
PostgreSQL, veri eriÅimini düzenlemek için pseudo user kavramını kullanır. Postgres kullanıcısı, veri dosyalarının ownerliÄi gibi özgün bir amaçla yaratılmıÅtır. Hiç bir kullanıcı (izin verilmediÄi sürece) postgres kullanıcısı haklarıyla login olup eriÅim saÄlayamaz. Bu kullanıcı kimliÄi postmaster programı tarafından veritabanı dosyalarını diÄerlerinin adına eriÅimi saÄlamak için kullanır.
Ä°Åte bu nedenlerden dolayı, çalıÅan bir PostgreSQL sistemi oluÅturmak için gerekli ilk adım, bu postgres kullanıcısını yaratmaktır.
Yeni bir kullanıcı yaratmak, sistemden sisteme gore bazı farklılıklar gösterir. Linux kullanıcıları (root iken) useradd komutunu kullanabilirler:
[root@localhost root]# useradd postgres
DiÄer UNIX sistemlerinde bir yapılandırma dosyasının düzenlenmesi, ya da bir yönetim aracının (administration tool) kullanılması gerekebilir. Bunun için sistemlerin kendi özelliklerinin bilinmesi yeterlidir.
Postgres kullanıcısının, uygun bir Åifre koruma yöntemi ile login olmasını engellemeyi unutmayın.
Åimdi veritabanını oluÅturup initialize etmek gerekiyor. Ardından da postmaster I baÅlatacaÄız.
PostgreSQL veritabanını, initdb yardımcı uygulamasını kullanarak initialize edeceÄiz. initdb ye dosya sistemimizin nerede olduÄunu ve veritabanı dosyalarımızın nerede olduÄu bilgilerini vermek durumundayız. Ãncelikle root kullanıcısı ile verilerin olacaÄı dizini açıp, dizin iznini postgres kullanıcısına verilmesi gerekiyor:
[root@localhost root]# mkdir /usr/local/pgsql/data
[root@localhost root]# chown postgres /usr/local/pgsql/data
Buradaki dizin, varsayılan dizindir. Daha önce de belirtildiÄi gibi, veri dizininizi ayrı bir yerde tutabilirsiniz, ancak bu dizini derleme aÅamasında belirtmeniz gerekir.
Veritabanını oluÅturmak için postgres kullanıcısını kullanacaÄız. Ãncelikle superuser (root) a geçip , oradan da postgres kullanıcısı olmak gerekir:
[lkduser@localhost lkduser]# su
[root@localhost root] su  postgres
[postgres@localhost postgres]
Programlar postgres kullanıcısının hakları ile çalıÅacaklar ve PostgreSQL veritabanı dosyalarına eriÅilebileceklerdir. DiÄer örneklerden ayırabilmek için, postgres kullanıcısı tarafından yürütülen komutları [postgres@localhost postgres] ile göstereceÄiz.
Veritabanını initdb ile initialize edelim:
[postgres@localhost postgres] /usr/local/pgsql/bin/initdb ÂD /usr/local/pgsql/data
This database system will be initialized with the user name "Postgres".
This user will own all the data files and must also own the server process.
...
Enabling unlimited row width for system tables.
Creating system views.
Loading pg_description.
Setting lastsysoid.
Vacuuming database.
Copying template1 to template0.
Success. You can now start the database server using:
   /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
   /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
[postgres@localhost postgres]
EÄer herÅey yolunda giderse, yeni ve boÅ bir veritabanı sunucunuz, initdb ye -D ile belirttiÄiniz yerde hazırdır!
Åimdi, sunucu iÅlemini baÅlatalım. Aynı Åekilde, postmaster a ÂD seçeneÄi ile veritabanının hangi dizinde olduÄunu belirtmemiz gerekir. EÄer bir aÄ Ã¼zerindeki tüm kullanıcıların veritabanımıza eriÅmelerini istiyorsak, -i seçeneÄini de uzak istemcilere izin verebilmek için postmaster a geçmeliyiz:
[postgres@localhost postgres] /usr/local/pgsql/bin/postmaster Âi ÂD /usr/local/pgsql/data >logfile 2>&1 &
Burada, iÅlem çıktılarını (process output) Postgres kullanıcısının home dizinindeki bir dosyaya (buradaki örnekte logfile) yönlendirdik ve standart outputu (stdout) 2 >&1 shell construction kullanarak standart error (stderr) ile birleÅtirdik. Bu dosyayı tabii ki baÅka bir yere de koyabilirsiniz.
[postgres@localhost postgres]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data > /var/log/postgresql.log 2>&1 &
DEBUG:Â database system was shut down at 2001-10-29 13:23:35 EET
DEBUG:Â CheckPoint record at (0, 1522064)
DEBUG:Â Redo record at (0, 1522064); Undo record at (0, 0); Shutdown TRUE
DEBUG:Â NextTransactionId: 615; NextOid: 18720
DEBUG:Â database system is in production state
[postgres@localhost postgres]$ /usr/local/pgsql/bin/psql template1
Welcome to psql, the PostgreSQL interactive terminal.
Type:Â \copyright for distribution terms
      \h for help with SQL commands
      \? for help on internal slash commands
      \g or terminate with semicolon to execute query
      \q to quit
template1=# \l
 List of databases
 Database | Owner
-----------+----------
 template0 | postgres
 template1 | postgres
(2 rows)
template1=# \q
[postgres@localhost postgres]$
Burada deÄiÅik parametreler mümkündür. Bunlar rpmÂden kurulum bölümünde anlatılmıÅtır. Ãrnek olarak, PostgreSQLÂi standart portu olan 5432Ânin dıÅındaki bir porttan, 6879Âdan çalıÅtıralım:
[postgres@localhost postgres]$/usr/local/pgsql/bin/postmaster -i -p 5455 -D /usr/local/pgsql/data 2>&1 &
Burada Âi ile tcp-ip portu açtıktan sonra Âp ile port numarasını verilmiÅtir. PostgreSQLÂin standart portu olan 5432 dıÅındaki herhangi bir porttan baÄlanmak istediÄinizde PostgreSQL uygulamalarına Âp ile port numarasını geçirmeniz gerekir.
Â
/usr/local/pgsql/bin/psql -p 6879 template1/usr/local/pgsql/bin/psql -p 5455 template1
Aynı Åey createdb, pg_dump gibi diÄer uygulamalar için de geçerlidir.
pg.hba.conf dosyasının düzenlenmesi
Varsayılan deÄer olarak, PostgreSQL uzaktan eriÅime izin vermez. Bu izni vermek için pg_hba.conf dosyasını düzenlemeniz gerekir. Bu dosya veritabanının dosya alanında (örneÄimizde /usr/local/pgsql/data) bulunur ve veritabanına baÄlanmak için uzaktan eriÅecek istemcilerle ilgili izin ya da red bilgilerini içerir. Bunun biçemi oldukça basittir, ve PostgreSQL kurulumu ile gelen dosya yeni veriler eklemek için oldukça ayrıntılı bir yardım dosyası içerir. Bu dosyayı düzenleyerek bir tek kullanıcı, makineler ya da bilgisayar gruplarına istediÄiniz veritabanına/veritabanlarına eriÅim imkanı saÄlayabilirsiniz.
AÅaÄıdaki örnekte yerel aÄ içindeki bir makineye, herhangi bir yetkilendirme olmadan istediÄi veritabanına eriÅim hakkı vereceÄiz: EÄer siz daha farklı bir eriÅim planlıyorsanız, yapılandırma dosyasındaki yönergeleri takip ediniz.
pg_hba.conf dosyasının sonuna aÅaÄıdaki gibi bir satır ekleyelim:
hostall 192.168.0.0  255.255.0.0  trust
Bu satır, IP adresi 192.168 ile baÅlayan herhangi bir bilgisayarın (host) tüm veritabanlarına (all) Åifresiz olarak (trust) baÄlanma izni verir.
PostgreSQL veritabanı sunucuna varsayılan eriÅim Åifresizdir. Yani sunucu üzerindeki herkes ÂU parametresini postgres deÄeri ile birlikte geçirirse veritabanına eriÅim hakkı kazanır.
           [devrim@localhost devrim]$ psql template1 ÂU postgres
Welcome to psql, the PostgreSQL interactive terminal.
Â
template1=# \q
[devrim@localhost devrim]$
Ãzellikle çok kullanıcılı sistemlerde bu önemli bir güvenlik sorunudur. Daha önce devrim kullanıcısına postgres izni verilmediÄi halde bu kullanıcı veritabanına eriÅebilmektedir. Bunu aÅabilmek için iki aÅama gerekir: Kullanıcılar için Åifre tanımlama ve veritabanına eriÅim için Åifre sorgulamasını zorunlu hale getirme.
Kullanıcılar için Åifre tanımlama pg_passwd komutu ile yapılmaktadır. Ä°lk kez bir Åifre atanacaksa verilecek dosya ismi komut tarafından yaratılmak istenir. Ãrnek verelim. Åifre dosyamızın adı passwdf olsun. Bu dosya $PGDATA dizininde olmalıdır:
[postgres@localhost postgres]$ cd data/
[postgres@localhost postgres]$ pg_passwd passwdf
File "passwdf" does not exist. Create? (y/n): y
Username: lkduser
New password:
Re-enter new password:
[postgres@localhost postgres]$ pg_passwd passwdf
Username: postgres
New password:
Re-enter new password:
passwdf dosyasına lkduser ve postgres kullanıcılar için Åifre ekledik. Buradaki kullanıcıların sistemdeki gerçek kullanıcı olmalarına gerek yoktur. Sanal bir kullanıcı ile güvenliÄi arttırabilirsiniz. Tablonun / veritabanının tüm haklarını o kullanıcıya da verebilirsiniz.
pg_hba.conf dosyasını düzenleme
hostall 192.168.0.0  255.255.0.0   trust
satırını
host all 127.0.0.1 255.255.255.255    password passwdf
olarak deÄiÅtirelim. PostgreSQLÂi restart ettikten sonra deÄiÅikliklerimiz aktif olacaktır.
bash-2.04$ psql pgornek -p 5455 -U lkduser
Password:
...
pgornek=# \q
Burada deÄiÅik alternatifler mümkündür. Ãrnek vermek gerekirse, bir ipÂye Åifre sormasını ama baÅka bir ipÂye sormamasını ya da bu iki ipÂnin farklı Åifre dosyalarını kullanmalarını saÄlayabiliriz.
psql
OracleÂdaki SQL*PLUS gibi PostgreSQLÂde psql adında command line aracı vardır. PostgreSQL veritabanları genellikle bu uygulama tarafından yaratılır ve yönetilir. psql :
psql [seçenekler] [veritabanı_adı [kullanıcı_adı]]
biçiminde çalıÅır.
Daha önce de gördüÄümüz gibi, psqlÂi baÄlanmak istediÄimiz veritabanı adını vererek çalıÅtırıyoruz. Sunucunun adını, veritabanının dinlediÄi port numarasını ve baÄlantı için geçerli bir kullanıcı adı ve Åifresinin bilinmesi gerekmektedir. Basit bir baÄlantı aÅaÄıdaki gibidir:
[postgres@localhost postgres] psql pgornek
Varsayılan veritabanı, kullanıcı adı, sunucu makine adı ve dinlenilen port numarası sırasıyla PGDATABASE, PGUSER, PGHOST ve PGPORT çevre deÄiÅkenlerinin ayarlanması ile deÄiÅtirilebilir.
Bu varsayılan deÄerler yine sırasıyla psqlÂe Âd, -U, -h ve Âp seçeneklerini geçirerek deÄiÅtirilebilir.
          Â
Not: psqlÂi sadece bir veritabanına baÄlanarak çalıÅtırabiliriz. Bu, ilk veritabanını yaratmak konusunda tavuk-yumurta ikilemini anımsatır. postgres kullanıcısı yaratılmıÅtı. Ä°lk veritabanını yaratmak için daha önce anlatılan template1 veritabanı kullanılacaktır.template1 e baÄlandıktan sonra veritabanımızı yaratabilir, ardından psqlÂi yeniden baÅlatarak ya da \c parametresi ile yeni veritabanımıza baÄlanabiliriz.
psql komutları
psql baÅladıÄı zaman, eÄer kullanıcının dizininde varsa ve okuma izni varsa .psqlrc dosyasını okur.Bu dosya kabuk scripti baÅlangıç dosyasına benzer ve psqlÂin istenildiÄi Åekilde çalıÅmasını saÄlar. psql i bu dosyayı okumadan çalıÅtırmak için Âx parametresini kullanmamız gerekir.
psql' i çalıÅtırdıktan sonra baÄlandıÄımız veritabanı ve ardından => promptu çıkar. Ä°ki çeÅit komut biçimi vardır: İç (internal) komutlar ve SQL komutları.
psql' e PostgreSQLÂin desteklediÄi herhangi bir SQL komutunu verebilirsiniz.
NOT: Desteklenen SQL komutlarının listesini \h iç komutu ile görebiliriz. Ãzel olarak istenen bir komut varsa \h sql_komutu ile de yardımı alabiliriz. \? iç bize tüm iç komut listesini verecektir.
psql de komutlar birden fazla satırda yazılabilir. Böyle zamanlarda psql promptu ‑> Åekline dönüÅecek ve daha fazla giriÅin beklendiÄi belirtilecektir:
[postgres@localhost postgres] /usr/local/pgsql/bin/psql pgornek
...
pgornek=> SELECT *
pgornek-> FROM musteri
pgornek->;
...
[postgres@localhost postgres]
psql e SQL komutunun bittiÄini anlatmak için komut sonuna noktalı virgül (;) iÅaretini konur. Yani bu iÅaret SQL komutunun bir parçası deÄildir.
psql' i ÂS seçeneÄi ile baÅlatırsak psql komutlarımızı tek satırda bitirmemizi bekleyecektir.  Böyle bir durumda noktalı birgül koymaya gerek yoktur. Tek satır modunda (single line mode) olduÄumuzu anımsatmak için, psql promptu ^> Åeklini alacaktır.
Komut satırı (Command line) komutları
Yine anlaÅılabilirlik için aÅaÄıdaki metinler TürkçeÂye çevirilmemiÅtir. Seminerin webdeki notlarında bu bilgiler TürkçeleÅecektir.
 -a             |
Echo all input from script (Print all the lines to the screen as they are read.) |
 -A             |
Unaligned table output mode |
 -c <query>     |
Run only single query (or slash command) and exit (This is useful in shell scripts) Also, in manual it says Âquery must be either a query string that is completely parseable by the backend (i.e., it contains no psql specific features), or it is a single backslash command. Thus you cannot mix SQL and psql meta-commands. To achieve that, you could pipe the string into psql, like this: echo "\x \\ select * from foo;" | psql. |
 -d <dbname>    |
Specify database name to connect to |
 -e             |
Echo queries sent to backend |
 -E             |
Display queries that internal commands generate |
 -f <filename>  |
Execute queries from file, then exit |
 -F <string>    |
Set field separator (default: "|") |
 -h <host>      |
Specify database server host |
 -H             |
HTML table output mode |
 -l             |
List available databases, then exit |
 -n             |
Disable readline, prevents line editing |
 -o <filename>  |
Send query output to filename. Use the form |pipe to send output to a filter program |
 -p <port>      |
Specify database server port |
 -P var[=arg]   |
Set printing option var to arg (see \pset command) |
 -q             |
Run quietly (no messages, only query output) |
 -R <string>    |
Set record separator (default: newline) |
 -s             |
Single step mode (confirm each query) |
 -S             |
Single line mode (newline terminates query rather than semi-colon) |
 -t             |
Print rows only |
 -T text        |
Set HTML table tag options (width, border) |
 -U <username>  |
Specify database username |
 -v name=val    |
Set psql variable name to value |
 -V             |
Show version information and exit |
 -W             |
Prompt for password (should happen automatically) |
 -x             |
Turn on expanded table output |
 -X             |
Do not read startup file (~/.psqlrc) |
psql tarafından desteklenen iç komutlar aÅaÄıdaki gibidir:Â
 \a            |
Toggle between unaligned and aligned mode |
 \c[onnect] [dbname|- [user]] |
connect to new database. Use  as the database name to connect to the default database if you need to give a user name. |
\C <title>Â Â Â Â |
set table title for output (same as \pset title) |
 \copy ...     |
perform SQL COPY with data stream to the client machine |
 \copyright    |
show PostgreSQL usage and distribution terms |
 \d <table>    |
describe table (or view, index, sequence) |
 \d{t|i|s|v}   |
list tables/indices/sequences/views |
 \d{p|S|l}     |
list permissions/system tables/lobjects |
 \da           |
list aggregates |
 \dd [object]  |
list comment for table, type, function, or operator |
 \df           |
list functions |
 \do           |
list operators |
 \dT           |
list data types |
 \e [file]     |
edit the current query buffer or file with external editor |
 \echo <text>  |
write text to stdout |
 \encoding <encoding>  |
set client encoding |
 \f <sep>      |
change field separator |
 \g [file]     |
send query to backend (and results in file or |pipe) |
 \h [cmd]      |
help on syntax of SQL commands, * for detail on all commands |
 \H            |
Toggle HTML mode |
 \i <file>     |
read and execute queries from file |
 \l            |
list all databases |
 \lo_export, \lo_import, \lo_list, \lo_unlink |
large object operations |
 \o [file]     |
send all query results to file, or |pipe |
 \p            |
show the content of the current query buffer |
 \pset <opt>   |
set table output opt, which can be one of: format border expanded fieldsep null recordsep tuples_only title tableattr pager |
 \q            |
quit psql |
 \qecho <text> |
write text to query output stream (see \o) |
 \r             |
reset (clear) the query buffer |
 \s [file]     |
print history or save it in [file] |
 \set <var> <value> |
set internal variable |
 \t            |
show only rows (toggles between modes) |
 \T <tags>     |
HTML table tags |
 \unset <var>  |
unset (delete) internal variable |
 \w <file>     |
write current query buffer to a <file> |
 \x            |
Toggle expanded output |
 \z            |
list table access permissions |
 \! [cmd]      |
shell escape or command |
Kpsql
http://www.mutinybaysoftware.com adresinde bulabileceÄiniz Kpsql yazılımı psqlÂin görsel bir alternatifidir. Ancak bu yazılım artık geliÅtirilmemektedir.
Veritabanına baÄlanma ve sunucuyu baÅlatma/durdurma scriptleri
        Â
Åimdi veritabanına baÄlanmayı deneyerek çalıÅıp çalıÅmadıÄını deneyebiliriz. psql uygulaması veritabanına baÄlantı kurup, basit yönetim iÅlemlerini (kullanıcı yaratma, veritabanı yaratma, tablo yaratma, vs) yapmaya yarar. Birazdan bu aracı veritabanı yaratma ve bu veritabanının içine veri eklemek için kullanacaÄız. Åimdi, postmaster in çalıÅtıÄını göstermek için veritabanına baÄlanmaya çalıÅalım:
[postgres@localhost postgres] /usr/local/pgsql/bin/psql
psql: FATAL 1: Database "postgres" does not exist in the system catalog.
Hatamız nerede? Varsayılan deÄer olarak psgl yerel makinedeki veritabanına baÄlanıp programı çalıÅtıran kullanıcının adı ile aynı ada sahip olan veritabanına eriÅmeye çalıÅır. Postgres adında bir veritabanı yaratmadıÄımız için baÄlanma giriÅimi sonuçsuz kalacaktır. Ancak bu postmasterÂin çalıÅmadıÄı anlamına gelmez.
Belirli bir veritabanına baÄlanmak için ise iki yol var: Veritabanı ismini psql komutundan hemen sonra yazmak ya da Âd veritabani_adi parametresini psql e geçmek. BoÅ bir veritabanı veri içermez, ancak sistemde yeni veritabanları yaratabilmemiz için iki veritabanı bulunur: Bunlardan biri template1 dir. Bu veritabanına yönetim için baÄlanabiliriz.
AÄ Ã¼zerinden baÄlanabilmeyi kontrol edebilmek icin, aÄ içindeki PostgreSQL kurulu baÅka bir makineden bizim makinemize baÄlanmayı deneyelim. IP adresi ya da host adını ,-h parametresi ile , -d ile de system veritabanlarından birini belirtmemiz gerekir (henüz gerçek bir veritabanı yaratmadık):
remote$ psql Âh 192.168.0.66 Âd template1
Welcome to psql, the PostgreSQL interactive terminal.
Type:Â Â Â Â \copyright for distribution terms
         \h for help with SQL commands
         \? For help on internal slash commands
         \g or terminate with semicolon to execute query
         \q to quit
template1=# \q
remote$
Yapmamız gereken son Åey, postmaster sunucu iÅleminin makine yeniden baÅlatıldıÄında otomatik olarak baÅlatabilmektir.
Aslında burada yapmamız gereken tek Åey postmaster in baÅlangıçta çalıÅmasını saÄlamaktır. Bunun nasıl yapılacaÄı, Linux ve Unix türevleri arasında farklılıklar göstermektedir. Bunun için sistemin kendi dokümanlarına bakabilirsiniz.
EÄer PostgreSQLÂi bir Linux daÄıtımından kurduysanız, RPM paketleri zaten baÅlangıç sorununu çözmüŠolacaktır. SuSE ve RedHat daÄıtımlarında PostgreSQL,system multi-user moduna geçtiÄinde (init 3) /etc/rc.d/init.d/postgresql scripti ile baÅlatılır.
EÄer kendiniz bir baÅlangıç scripti yazmak isterseniz, postmaster ı sizin istediÄiniz parametrelerle baÅlatmalı, ve scriptinizin baÅlangıçta otomatik olarak çalıÅmasını saÄlamalısınız. Postmaster in postgres kullanıcısı ile çalıÅtıÄına emin olunuz. BaÅlangıç scriptleri ile ilgili ayrıntılı bilgiyi http://techdocs.postgresql.org ya da tek yansısı olan http://techdocs.oper.metu.edu.tr adreslerinden alabilirsiniz. AÅaÄıda örnek bir script göreceksiniz:
#!/bin/sh
# PostgreSQLÂi baÅlatmak ve durdurmak için script
SERVER=/usr/local/pgsql/bin/postmaster
PGCTL=/usr/local/pgsql/bin/pg_ctl
PGDATA=/usr/local/pgsql/data
OPTIONS=-i
LOGFILE=/usr/local/pgsql/data/postmaster.log
case "$1" in
      start)
             echo -n " PostgreSQL baÅlatılıyor "
             su -l postgres -c "nohup $SERVER $OPTIONS -D $PGDATA >$LOGFILE 2>&1 &"
             ;;
      stop)
             echo -n "PostgreSQL durduruluyor..."
             su -l postgres -c "$PGCTL -D $PGDATA stop"
             ;;
      *)
             echo "Usage: $0 {start|stop}"
             exit 1
             ;;
esac
exit 0
Bu scripti içeren, çalıÅtırılabilir bir script dosyası yaratın ve MyPostgreSQL adını verin. Åimdi ise sunucu kapanırken PostgreSQLÂi de kapatacak, açılırken PostgreSQLÂi de açacak Åekilde düzenleyelim:
MyPostgreSQL start
MyPostgreSQL stop
Bir çok Linux daÄıtımı gibi, System V type init scripting kullanan sistemlerde, bu scripti uygun bir yere yerleÅtirmelisiniz. SuSE ya da RedHat için örnek vermek gerekirse, bu scripti /etc/rc.d/init.d/ altına yerleÅtirmemiz ve sembolik linkleri aÅaÄıdaki yerlere, sunucunun multi-user moda girip çıktıÄı anlarda PostgreSQLÂi baÅlatıp kapatmasını saÄlamak için yaratmamız gerekir:
/etc/rc.d/rc2.d/S15MyPostgreSQL
/etc/rc.d/rc2.d/K15MyPostgreSQL
/etc/rc.d/rc3.d/S15MyPostgreSQL
/etc/rc.d/rc3.d/K15MyPostgreSQL
...
BaÅlangıç scriptleri sistemlerinizin özelliklerine gore deÄiÅiklik gösterebilir.
Direk bir komutla durdurmak isterseniz:
[postgres@localhost postgres]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
waiting for postmaster to shut down....Smart Shutdown request at Mon Oct 29 13:53:33 2001
DEBUG:Â shutting down
..DEBUG:Â database system is shut down
done
postmaster successfully shut down
[1]+ Done                   /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data 2>&1
ÃNEMLÄ° NOT: PostgreSQLÂi k-e-s-i-n-l-i-k-l-e kill Â9 ÂÂpidof postmaster ile durdurmayınız!!!
Åimdi sıra bir veritabanı yaratmakta.