Bu yazıda veritabanı yönetimi anlatılmayacaktır. Ancak bu kısımda PostgreSQLÂin çalıÅır durumda olup olmadıÄı gösterilecektir. Pgornek adını vereceÄimiz basit bir veritabanı yaratıp içine bir takım veriler yerleÅtireceÄiz.
BaÅlamadan önce, PostgreSQLÂin sistemimizde çalıÅıp çalıÅmadıÄını, postmaster processine bakarak kontrol edelim:
$ ps -el | grep post
EÄer çıktıda postmaster processi varsa, PostgreSQL sisteminizde çalıÅıyor demektir.
PostgreSQL veritabanı sunucusunun herbir kullanıcısı kendi veritabanını yaratabilir ve içindeki veriye eriÅimi düzenleyebilir. Bunu yapabilmek için PostgreSQLÂe sistemdeki geçerli kullanıcıları belirtmemiz gerekir. Bunun için PostgreSQLÂin createuser uygulamasını aÅaÄıdaki Åekilde kullanacaÄız:
Root iken su komutu ile PostgreSQL kullanıcısı, postgres olalım. Ardından da createuser konutu ile kullanıcıyı oluÅturalım.Root iken su komutu ile PostgreSQL kullanıcısı, postgres olalım. Ardından da createuser komutu ile kullanıcıyı oluÅturalım. Burada oluÅturulan kullanıcı geçerli bir PostgreSQL kullanıcısı olarak kaydedilir. Åimdi, bu kullanıcı haklarını varolan Linux/Unix kullanıcısı olan lkduserÂa verelim. Burada verilen isim gerçek bir kullanıcı olmak zorunda deÄildir. Ãzellikle çok kullanıcılı sistemlerde gerçek bir kullanıcı adı kullanılmadan yapılacak baÄlantılar gerçek anlamda güvenlik saÄlayacaktır. (Tabii ki böyle bir kullanıcı olmadan nasıl baÄlanacaÄınız sorusu aklınıza gelebilir. Burada psqlÂe ÂU parametresi ile kullanıcı adını geçirebilirsiniz.)
$ su
# su  postgres
[postgres@localhost postgres] /usr/local/pgsql/bin/createuser lkduser
Shall the new user be able to create databases? (y/n) y
Shall the new user be able to create new users (y/n) n
CREATE USER
[postgres@localhost postgres]
Burada, lkduser kullanıcısına yeni veritabanı yaratma izni verdik, ama yeni kullanıcı yaratma hakkı vermedik.
Kullanıcımıza aynı zamanda PostgreSQL kullanıcısı olma hakkı verdiÄimize göre artık bir veritabanı yaratabileceÄiz. Tekrar lkduser (root deÄil!) kullanıcımıza dönelim ve komutunu verelim:
$ /usr/local/pgsql/bin/createdb pgornek
CREATE DATABASE
$
Veritabanı yaratıldı. PostgreSQLÂin interaktif terminali olarak adlandırılan psql uygulaması ile bu veritabanına baÄlanabilmeniz gerekir:
$ /usr/local/pgsql/bin/psql Âd pgornek
Welcome to psql, the PostgreSQL interactive terminal.
...
pgornek=>
PostgreSQLÂe login olduÄunuza göre, artık bazı komutları çalıÅtırabilir. KabuÄa geri dönmek için \q komutu verilebilir.
pgornek=>\q
[lkduser@localhost lkduser]#
KabuÄa dönmeden kabuki komutu vermek mümkündür. Bunun için vermek istediÄiniz komutun baÅına \! koymanız yeterlidir:
pgornek=>\!frm
You have no mail.
pgornek=>
pgornek veritabanınızda, aÅaÄıdaki sql komutlarını psql komut satırında yazıp tablolarınızı oluÅturabilirsiniz. Bunları kopyala/yapıÅtır ile bir metin dosyasına kaydedebilir ve psqlÂdeÂ
\i dosya_adi komutu ile dosyayı okutarak da tabloları oluÅturabilirsiniz. Bu SQL komutları plain text biçimindedir, bunları kullandıÄınız metin programı ile (pico,nano,vi,vb.) istediÄiniz Åekilde düzenleyebilirsiniz. AÅaÄıdaki satırlar http://seminer.devrim.oper.metu.edu.tr adresinde seminerden sonra ayrı bir dosya halinde bulunabilir.
Â
create table musteri
(
   musteri_no                        serial                       ,
   ad                                varchar(32)                  ,
   soyad                           varchar(32)          not null,
   adres                              varchar(64)                  ,
   sehir                           varchar(32)                  ,
   posta_kodu                      char(10)             not null,
   telefon                         varchar(11)                  ,
   CONSTRAINT                      musteri_pk PRIMARY KEY(musteri_no)
);
create table mal
(
   mal_no                          serial                       ,
   tanım                              varchar(64)          not null,
   gelis_fiyati                    numeric(7,2)                 ,
   satis_fiyati                    numeric(7,2)                 ,
   CONSTRAINT                      mal_pk PRIMARY KEY(mal_no)
);
create table siparis_bilgisi
(
   siparis_bilgisi_no             serial                       ,
   musteri_no                     integer              not null,
   gelis_tarihi                   date                 not null,
   cikis_tarihi                   date                         ,
   ucret                         numeric(7,2)                 ,
   CONSTRAINT                    siparis_bilgisi_pk PRIMARY KEY(siparis_bilgisi_no)
);
create table stok
(
   mal_no                        integer              not null,
   miktar                       integer              not null,
   CONSTRAINT                     stok_pk PRIMARY KEY(mal_no)
);
create table siparis
(
   siparis_bilgisi_no                   integer              not null,
   mal_no                        integer              not null,
   miktar                       integer              not null,
   CONSTRAINT                     siparis_pk PRIMARY KEY(siparis_bilgisi_no, mal_no)
);
create table barkod
(
   barkod_ean                    char(13)             not null,
   mal_no                        integer              not null,
   CONSTRAINT                     barkod_pk PRIMARY KEY(barkod_ean)
);
Ä°leride tabloları silip yeniden baÅlamak isterseniz, bu çok kolaydır. AÅaÄıdaki SQL komutlarını verin:
drop table barkod;
drop table siparis;
drop table stok;
drop table siparis_bilgisi;
drop table mal;
drop table musteri;
drop sequence musteri_musteri_no_seq;
drop sequence mal_mal_no_seq;
drop sequence siparis_bilgisi_siparis_bilgisi_no_seq;
Burada belirtmek isterim ki , tabloyu sildiÄiniz anda içindeki veriler de silinir.
Åimdi sırada tablolara veri eklemek var:
Bu ve bundan önceki tüm örneklere sununun konacaÄı web sayfalarından da ayrı dosyalar halinde ulaÅabileceksiniz. Siz tabii ki kendi verilerinizi istediÄiniz gibi ekleyebilirsiniz, ancak tabii ki bu durumda sonuçlarınız burada yazılanlardan farklı olacaktır. Bu nedenle konuya hakim olana kadar aÅaÄıdaki örnek verileri kullanmanız önerilir.
Rahat görebilmeniz açısında veriler aÅaÄıda satır satır verilmiÅtir, ancak siz bunları tek bir satırda yazabilirsiniz. Ancak her giriÅin sonuna m-u-t-l-a-k-a noktalı virgül (;) iÅaretini koymalısınız, böylece psqlÂe her bir SQL komutunun sona erdiÄi bilgisini vermiÅ oluruz.
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Ãzgür','Dönmez','Arı Koop.2/2 Batıkent','Ankara','06130','03122560123');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Ãdül','Ceylan',' MaviÅehir D/35','Ä°zmir','35300','02323680123');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Ãzlem','Yıldırım','LKD Caddesi inet APT No:5','Samsun','55120'04543210123');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Devrim','Gündüz','TR.NET ODTÃ','Ankara','06531','03122959595');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Senem','IÅık','Mimozalar Sitesi A/41 Ãayyolu','Ankara','06300,'2350123');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Abdül','GülÅen','5 Pasture Lane','Nicesehir','NT3 7RT','267 1232');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Anıl','Gündüz','34 Holly Way','Bingham','BG4 2WE','342 5982');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Umut','Asil','34 Holly Way','Bingham','BG4 2WE','342 5982');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Tülay','Asil','36 Queen Street','Histon','HT3 5EM','342 5432');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('KürÅad','Sezgin','86 Dysart Street','Tibsville','TB3 7FG','505 5482');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Doruk','FiÅek','54 Vale Rise','Bingham','BG3 8GD','342 8264');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Berk','Demir','42 Thached way','Winersby','WB3 6GQ','505 6482');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Mustafa','Akgül','73 Margeritta Way','Oxbridge','OX2 3HX','821 2335');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Evren','Balık','2 Beamer Street','Wellsehir','WT3 8GM','435 1234');
insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Ekin','AteÅ','4 The Square','Millsehir','MT2 6RT','961 4526');
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Wood Puzzle', 15.23, 21.95);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Rubic Cube', 7.45, 11.49);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Linux CD', 1.99, 2.49);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Tissues', 2.11, 3.99);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Picture Frame', 7.54, 9.95);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Fan Small', 9.23, 15.75);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Fan Large', 13.36, 19.95);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Toothbrush', 0.75, 1.45);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Roman Coin', 2.34, 2.45);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Carrier Bag', 0.01, 0.0);
insert into mal(tanım, gelis_fiyati, satis_fiyati) values('Speakers', 19.73, 25.32);
insert into barkod(barkod_ean, mal_no) values('6241527836173', 1);
insert into barkod(barkod_ean, mal_no) values('6241574635234', 2);
insert into barkod(barkod_ean, mal_no) values('6264537836173', 3);
insert into barkod(barkod_ean, mal_no) values('6241527746363', 3);
insert into barkod(barkod_ean, mal_no) values('7465743843764', 4);
insert into barkod(barkod_ean, mal_no) values('3453458677628', 5);
insert into barkod(barkod_ean, mal_no) values('6434564564544', 6);
insert into barkod(barkod_ean, mal_no) values('8476736836876', 7);
insert into barkod(barkod_ean, mal_no) values('6241234586487', 8);
insert into barkod(barkod_ean, mal_no) values('9473625532534', 8);
insert into barkod(barkod_ean, mal_no) values('9473627464543', 8);
insert into barkod(barkod_ean, mal_no) values('4587263646878', 9);
insert into barkod(barkod_ean, mal_no) values('9879879837489', 11);
insert into barkod(barkod_ean, mal_no) values('2239872376872', 11);
insert into siparis_bilgisi(musteri_no, gelis_tarihi, cikis_tarihi, ucret) values(3,'03-13-2000','03-17-2000', 2.99);
insert into siparis_bilgisi(musteri_no, gelis_tarihi, cikis_tarihi, ucret) values(8,'06-23-2000','06-24-2000', 0.00);
insert into siparis_bilgisi(musteri_no, gelis_tarihi, cikis_tarihi, ucret) values(15,'09-02-2000','09-12-2000', 3.99);
insert into siparis_bilgisi(musteri_no, gelis_tarihi, cikis_tarihi, ucret) values(13,'09-03-2000','09-10-2000', 2.99);
insert into siparis_bilgisi(musteri_no, gelis_tarihi, cikis_tarihi, ucret) values(8,'07-21-2000','07-24-2000', 0.00);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(1, 4, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(1, 7, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(1, 9, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(2, 1, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(2, 10, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(2, 7, 2);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(2, 4, 2);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(3, 2, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(3, 1, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(4, 5, 2);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(5, 1, 1);
insert into siparis(siparis_bilgisi_no, mal_no, miktar) values(5, 3, 1);
insert into stok(mal_no, miktar) values(1,12);
insert into stok(mal_no, miktar) values(2,2);
insert into stok(mal_no, miktar) values(4,8);
insert into stok(mal_no, miktar) values(5,3);
insert into stok(mal_no, miktar) values(7,8);
insert into stok(mal_no, miktar) values(8,18);
insert into stok(mal_no, miktar) values(10,1);
ÃalıÅan PostgreSQL sistemimizle veritabanımızı yarattık, içine verileri girdik.
PostgreSQL sunucu iÅlemini düzgün olarak durdurmak önemlidir. Bu yazılmayı bekleyen verinin veritabanına iÅlenmesini ve shared memoryÂde kullandıÄı kaynakları boÅaltmasına yarar.
Veritabanını sorunsuz olarak durdurabilmek için, pg_ctl uygulamasını aÅaÄıdaki biçimde kullanınız:
[postgres@localhost postgres] /usr/local/pgsql/bin/pg_ctl ÂD /usr/local/pgsql/data stop
psql, initdb, createuser, createdb uygulamaları hakkında detaylı bilgiyi man sayfalarından alabilirsiniz. Ä°Ålemlerinizi kolaylaÅtırmak açısından PostgreSQL uygulamalarının yollarını kabuÄunuza tanıtmanız uygun olacaktır. Bunun için, standart UNIX/Linux kabuÄunuzun baÅlangıç dosyasına (.profile ya da .bashrc) aÅaÄıdaki satırları ekleyiniz:
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PATH MANPATH
PostgreSQL yedekleme araçları
PostgreSQL veritabanını yedeklemek ya da yedeklerden bilgileri geri yüklemek için iki komut bulunm    aktadır:
Bunlardan sadece pg_dump yeterlidir.
 pg_dump
pg_dump komutu, belirtilen bir makinedeki belirtilen bir veritabanın istenilen Åekildeki dumpÂunu alır. pg_dump komutu ile baÅka bir makinedeki yedeÄi almak, o makinedeki pg_hba.conf dosyasındaki izinlere baÄlıdır. Komut aynı iÅlemin tersini de yapabilir: Daha önce alınmıŠbir yedeÄi geri yükleyebilir. Yedek alırken çıktı ekrana basılır. Bunu
[root@localhost root]#psql pgornek > pgornek.dump
örneÄinde de gösterildiÄi gibi bir dosyaya yönlendirebilirsiniz.
Bu komuta verilebilecek bazı önemli parametreler aÅaÄıdaki gibidir. Tüm parametreler için man dosyasına bakabilirsiniz:
 Parametre            |
Ä°Ålevi |
-d db_adı |
Belirtilen veritabanın yedeÄini alır. |
-t tablo_adı |
Belirtilen tablonun yedeÄini alır. |
-s |
Verilen tablo ya da tüm veritabanının sadece Åemasını alır. |
-a |
Verilen tablo ya da veritabanının sadece verisini yedekler. |
PostgreSQL, 7.1 sürümü ile birlikte pg_restore komutunu getirmiÅtir. Pg_dump ile yaratılan arÅivi PostgreSQL veritabanına geri yükler.
Bunun dıÅında psql komutu veriyi yüklemek için iki farklı Åekilde kullanılabilir:
           1.psql command line komutları ile
[root@localhost /root]# psql pgornek -p 6879 -U lkduser -f pgornek.pgdump
Password:
You are now connected as new user lkduser
psql:pgornek.pgdump:17: NOTICE:Â CREATE TABLE/PRIMARY KEY will create implicit index 'ip_pkey' for table 'ip'
...
          2.psql internal komutları ile
[root@localhost /root]# psql pgornek -p 6879 -U lkduser
Password:
pgornek =# \i pgornek.pgdump
http://techdocs.postgresql.org/