Re: Bulk Update

From: Samed YILDIRIM <samed(at)reddoc(dot)net>
To: Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com>, "pgsql-tr-genel(at)postgresql(dot)org" <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: Bulk Update
Date: 2017-09-30 13:00:20
Message-ID: 532891506776420@web12j.yandex.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel


Selamlar Fırat,

Bu gereksinim için dblink'i kullanabilirsin. dblink ile çalıştırdığın sorgu mevcut transaction'dan bağımsız olarak hedef veritabanında çalışacaktır. Aşağıdaki dblink_exec bölümünü döngünün içerisine koyarak döngü içerisinde transaction açıp update yapabilir, istediğin sıklıkta transaction'ı commit edebilirsin.

Eklentiyi yaratmak için:



create extension dblink;

Eklentiyi oluşturduktan sonra transaction içerisinde aşağıdaki gibi kullanabilirsin.



begin;

--dblink ile veritabanına bağlan



select dblink_connect('dbname=firat');






--transaction'ı başlat


select dblink_exec('begin;');




-- sorguyu çalıştır



select dblink_exec('update bulk_update set c1=10 where id =50000;');








--transaction'ı commit et


select dblink_exec('commit;');




-- dblink bağlantısını sonlandır


select dblink_disconnect();



commit;




İyi çalışmalar.

Samed YILDIRIM

29.09.2017, 10:03, "Fırat Güleç" firat(dot)gulec(at)hepsiexpress(dot)com:


Merhabalar,



Bir konuda yardımınız ihtiyacım var. Postgresql 9.5.8 versiyonunu kullanıyoruz. Bulk bir update yapmaya ihtiyacımız oldu, yaklaşık 4.5 milyonluk bir kayıt. Oracle’da begin end’in arasına commit koyabiliyorduk. Fakat Postgresql’de bunu yapamadığımızı farkına vardık. 100 kayıt update ettikten sonra commit yapmak istiyoruz. Bu gibi ihtiyaçlar için Postgresql’de nasıl bir çözüm kullanıyorsunuz?



İyi çalışmalar.





Örnek kod:

DECLARE

c_delivery RECORD;

cur_rad CURSOR (x_address_id BIGINT, x_receiver_id BIGINT) FOR SELECT *

FROM receiver_address

WHERE receiver_id = x_receiver_id AND

address_id = x_address_id;

c_rad RECORD;

BEGIN

FOR c_delivery IN SELECT * FROM delivery WHERE recipient_address_id is NULL LIMIT p_record_cnt LOOP

OPEN cur_rad(c_delivery.receiver_address_id,c_delivery.receiver_id);

FETCH cur_rad INTO c_rad;

IF c_rad.id IS NOT NULL

THEN

UPDATE ******* SET recipient_address_id = c_rad.id WHERE id = c_delivery.id;

UPDATE ************ SET recipient_address_id = c_rad.id WHERE delivery_id = c_delivery.id;

END IF;

CLOSE cur_rad;

END LOOP;

END;





FIRAT GÜLEÇ

Veritabanı Yöneticisi

firat(dot)gulec(at)hepsiexpress(dot)com



M:0 532 210 57 18

İnönü Mh. Mimar Sinan Cd. No:3 Güzeller Org.San.Bölg. GEBZE / KOCAELİ








In response to

  • Bulk Update at 2017-09-29 07:03:02 from Fırat Güleç

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Erkan Durmuş 2017-09-30 14:25:23 Re: Bulk Update
Previous Message Fırat Güleç 2017-09-30 12:31:57 Re: Bulk Update