| From: | Erhan Ekici <erhan(dot)ekici(at)gmail(dot)com> |
|---|---|
| To: | Devrim GÜNDÜZ <devrim(at)gunduz(dot)org> |
| Cc: | Salim SAKAL <salim(dot)sakal(at)gmail(dot)com>, pgsql-tr-genel(at)postgresql(dot)org |
| Subject: | Re: [pgsql-tr-genel] PostgreSQL hakkında yardım lütfen |
| Date: | 2010-09-06 20:21:04 |
| Message-ID: | AANLkTi==WgrN2VX=zK=tiVaBEjLy2gOZHXVmCv+gA3pT@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-tr-genel |
Merhabalar,
Devrim'in yazdıklarına ek olarak :
Transaction için PHP de yapmanız gereken ekstra bir şey yok. Nasıl normal
SQL işlemlerinde -transactionı baslatırsınız, değişikliği yaparsınız, sonra
commit ederseniz- yapıyorsanız benzeri olacak. Sadece query sonucunu kontrol
edip ona göre sunucuya ROLLBACK yada COMMIT göndereceksiniz. (Tabi herhangi
bir insert update vs den önce bir query ile BEGIN gönderin)
Copy & Paste ile oluşturulmuş bir örneği aşağıda bulabilirsiniz. Tek INSERT
lik bir ifade var siz oraya tek transactionda yapmak istediğniz tüm
değişiklikleri vs yazabilirsiniz.
<?php
$conn = pg_connect("host=yourhost port=5432 dbname=yourdbname
user=yourusername password=yourpassword");
$result = pg_query($conn, "BEGIN");
$result = pg_query($conn, "INSERT INTO yourtable VALUES ('v1', 'v2',
'v3')");
$cmdtuples = pg_affected_rows($result);
if (!$result || $cmdtuples < 1 ) {
$feedback .= pg_last_error($conn);
$feedback .= ' Error - couldn\'t insert new row ';
pg_query($conn, "ROLLBACK");
return false;
} else {
//commit this transaction
pg_query($conn, "COMMIT");
return true;
}
?>
iyi calismalar,
Erhan Ekici
2010/9/6 Devrim GÜNDÜZ <devrim(at)gunduz(dot)org>
> On Mon, 2010-09-06 at 22:35 +0300, Salim SAKAL wrote:
> <kesildi>
> > örnek: insert query'de bağlantı hatası olursa rollback, sorun yoksa
> > commit...
>
> Ben sorunuzu anlamadım: Bir PHP satırında connection kısmı başarısız
> olursa tabii ki rollback olacaktır. Bir de özel olarak bir transaction
> başlatmadığınızda PostgreSQL o işlemi commit eder (başarılı olursa
> yani). İkinci ifadede ayrı bir transaction başlar.
>
> Örnek:
>
> BEGIN;
> INSERT...
> INSERT...
> COMMIT;
>
> ile
>
> INSERT...
> INSERT
>
> farklıdır. İlkinde 1 tx, ikincisinde 2 tx vardır. O yüzden bulk insert
> işlemlerinde tek tx kullanmak gerekir.
>
> Bilmem yardımcı oldu mu bu yanıt?
>
> > Şahsi kanaatimce açık kaynağın önündeki ciddi engellerden birisi de bu
> > konu. MSSQL Server için aramış olsaydım binlerce döküman bulabilirdim.
> > Oracle'a rakip PostgreSQL gibi özgür yazılım var ama döküman olmadığı
> > için yaygınlaşmıyor.
>
> Ben bu tarzı pek sevmiyorum. Üstteki sorunuzun yanıtı PostgreSQL'in 2500
> sayfalık belgesinin içinde var örneğin.
>
> Saygılar,
> --
> Devrim GÜNDÜZ
> PostgreSQL Danışmanı/Consultant, Red Hat Certified Engineer
> PostgreSQL RPM Repository: http://yum.pgrpms.org
> Community: devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
> http://www.gunduz.org Twitter: http://twitter.com/devrimgunduz
>
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Emre Hasegeli | 2010-09-06 20:39:53 | PHP PostgreSQL Transaction Kullanımı |
| Previous Message | Devrim GÜNDÜZ | 2010-09-06 19:43:53 | Re: PostgreSQL hakkında yardım lütfen |