From: | M(dot)Atıf CEYLAN <mehmet(at)atifceylan(dot)com> |
---|---|
To: | Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com> |
Cc: | pgsql-tr-genel <pgsql-tr-genel(at)postgresql(dot)org> |
Subject: | Re: Bulk Update |
Date: | 2017-09-29 20:58:16 |
Message-ID: | CA+M9mDQksaEvCsGGtoGYLr76RrHPTW=z2QeFJrbRXVLW56HQoA@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
Hocam fonksiyon içinden transaction başlatıp sonlandıramıyorsunuz.
Fonksiyon ile bunu yapamazsınız.
p_record_cnt değişkeni ile limit değeri belirlediğinize göre fonksiyonu
uygulama tarafında total count / limit değeri kadar döngüleyerek
çağırıyorsunuz ve bunu yapmak yerine tüm işlemi aynı döngü içinde yapmak
istiyorsunuz.
Doğru mu?
29 Eylül 2017 10:03 tarihinde Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com>
yazdı:
> 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İ
> ------------------------------
>
> [image: Inline image 1]
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | N. Can KIRIK | 2017-09-29 21:25:49 | Re: Bulk Update |
Previous Message | Fırat Güleç | 2017-09-29 07:03:02 | Bulk Update |