Wednesday, March 21, 2012

PostgreSql

Bir suredir PostgreSql tabani ile calismiyorduk, is icin gerekli oldu, kuvvetli bir taban. Ubuntu 11'de apt-get ile gelen en son versiyon 9.1 Bu taban MySql gibi acik kaynak, ve anlatildigina gore amaclari tamamen Oracle'in yerine gecebilmek. O yuzden komutlari Oracle komutlarina birebir uyumlu yaratiyorlar. Kurmak icin

sudo apt-get install postgresql

Faydali bazi komutlar surada bulunabilir. PG postgres adli bir Unix kullanicisi icin kurulacak o yuzden shell bazli tum PG komutlari basinda sudo -u postgres gerekli. Paket kurulunca bilgisayariniz baslayinca otomatik olarak baslamak uzere ayarli olacak, acip, kapatmak icin

sudo service postgresql [komut]

ki [komut] stop, start, restart olabilir.

Bazi tiyolar: Postgres'den veri cekip veri yuklemenin en hizli yollarindan biri CSV temelli. Veri almak icin



psql [taban ismi]  -h [makina] -p [port] -U [kullanici] -c "COPY (SELECT * from [tablo] where [sart]) TO stdout " > [csv dosya ismi]



Ya da sql dosyasi icinde

copy( .. SELECT .. ) to '/tmp/out' with csv header

gibi bir kullanim olabilir. Dikkat: bu durumda komut postgres kullanicisi tarafindan isletilecektir, bu kullanicinin sizin $HOME dizininize erisimi olmayabilir, o yuzden ustte /tmp/ kullanildi. Uzaktaki bir makina uzerinde SQL komut satirinda

copy( .. SELECT .. ) TO STDOUT with CSV HEADER > /tmp/out

ta kullanilabilir.  Ama en iyisi herhalde


psql [taban]  -h [makina] -p [port] -U [kullanici] -c "COPY (`cat komut.sql`) TO stdout with delimiter ',' CSV HEADER "  > /tmp/out

Bu komut uzaktaki bir taban uzerinde bir SQL dosyasi isletilir ve ciktiyi CSV olarak kaydeder. Parametrize edilmis halde biz run_csv.sh adli bir dosya icinde

psql taban  -h localhost -p 5432 -U postgres  -c "COPY (`cat $1`) TO stdout with delimiter ',' CSV HEADER "

kullaniriz, ve run_csv.sh dosya.sql > out

seklinde bunu kullanabiliriz.

Dosya yuklemek icin

psql [taban] -c "COPY [tablo] FROM '[dosya ismi]'";

Uzak tabanlara baglanmak: Eger -h ile uzaktaki (remote) tabanlarda sIk olarak psql komutlari veriyorsaniz, ve habire sifre sorulmasindan kurtulmak istiyorsaniz, .pgpass teknigini kullanabilirsiniz. Bu $HOME dizininizde olmasi gereken bir dosyadir, ve

makina:port:db:kullanici:sifre

formatindadir. Dosyanin chmod 0600 yapilmasi gerekiyor. Not: eger psql komutunu sudo -u postgres ile isletiyorsaniz (ki uzaktaki bir makina icin gerekli degil) o zaman .pgpass dosyasinin sizin makinanizdaki postgres kullanicisinin ana dizininde olmasi gerekiyor, bizim makinamizda bu /var/lib/postgres diye bir yerdeydi (su - postgres ile o kullaniciya girerek kontrol edebilirsiniz). Tabii ki dosya chown ile postgres'e ait yapilmali.

Ben PG ile calisirken cogunlukla run.sh adli bir script'i ayni dizinde tutarim. Bunun icinde mesela

psql dellstore2 -h localhost -p 5432 -U postgres < $1

gibi bir satir olabilir, taban onceden tanimlanmistir, cunku genellikle gelistirme sirasinda tek bir taban ile calisirim, ve gelistirirken,

sh run.sh test.sql

gibi komutlar isletirim. Boylece ustteki sql dosyasi direk belirtilen taban uzerinde isletilir. .pgpass icinde de

localhost:5432:dellstore2:postgres:[sifre]

ibaresi vardir.

Eger hstore adli bir veri tipini kullanmak istiyorsaniz,

sudo -u postgres psql [taban]

ile girdikten sonra

CREATE EXTENSION hstore;

komutunu kullanabilirsiniz.

Eger yeni Unix kullanicilarina Postgres uzerinde admin haklari vermek istiyorsaniz (ki bu eger admin'seniz kisisel hesabiniz icin iyi olur, yoksa pg_dump komutu bile kullanilamiyor), sudo -u postgres psql ile girdikten sonra

CREATE ROLE unix_kullanici_isminiz PASSWORD 'bir sifre' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;

ile kullanicinizi Postgres uzerinde super kullanici yapabilirsiniz.

Silmek

Postgresql'i apt-get remove ile silmek ise yaramayabilir (hala PG sureclerini isler gorduk, silme isleminden sonra bile). Daha kuvvetli bir silme islemi icin

sudo apt-get --purge remove postgresql\*

Dis dunyaya PG baglantisini 5432 portunu acmak istiyorsak, /etc/postgresql/9.1/main/postgresql.conf icinde

listen_addresses = '*'

tanimlanmis olmali.

GUI

Sema, ana / yabanci anahtar, tablolar hakkinda detayli bilgiler, SQL isletmek icin faydali bir GUI, Squirrel.

squirrel-sql.sourceforge.net

No comments: