Re: tekil olmayan kolona tekil anahtar eklesek?

From: Timu EREN <selamtux(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: tekil olmayan kolona tekil anahtar eklesek?
Date: 2006-11-15 19:45:59
Message-ID: 200611152146.01984.selamtux@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

Çarşamba 15 Kasım 2006 11:51 tarihinde, Erkin Tek şunları yazmıştı:
> Selam,
>
> Bir tabloma tekil anahtar eklememiş, dolayısiyle, aynı anahtara sahip
> girdiler var, fakat (direkt tembelliğimden) tekrar girmek istemiyorum.
> 1. seçeneğim 3 tane olan kayıttan ikisini silmek
> delete from arac where at_id=3 limit 2; işe yaramadı
> 2. seçenek at_id'leri birer birer arttırmak ki
> update arac set at_id=rownum
> oracle sql'inde rownum vardı, bir deneme olarak yaptım, olmadı
>
> bilemedim, arada başıma geliyor, bu kolonu (at_id) nasıl otomatik
> arttırabilirim ki? Tek amaç bunun tekil anahtar olması, her türlü yol mübah
> olarak bakıyorum (e tabi belli kriterler içinde :P )
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html

İlk önce bir SEQUENCE oluşturalım.
CREATE SEQUENCE tabloadi_at_idx;

Ardından bir fonksiyon yazıp tüm tabloyu bir seferde alıp loop içerisinde
id'leri düzenleyelim.

CREATE OR REPLACE FUNCTION id_duzenle() RETURNS VOID AS $$
DECLARE
v_rec RECORD;
BEGIN
FOR v_rec IN SELECT * FROM tabloadi LOOP
UPDATE tabloadi SET at_id=nextval('tabloadi_at_idx') WHERE
kolon1=v_rec.kolon1 AND kolon2=v_rec.kolon2;
END LOOP;
RETURN ;
END
$$
LANGUAGE plpgsql;

id'lerin otomatik atanması için varsayılan değeri SEQUENCE'den alalım.

ALTER TABLE tabloadi ALTER COLUMN at_id SET DEFAULT
nextval('tabloadi_at_idx');

fonksiyonu çalıştıralım.
SELECT id_duzenle();

Artık bu fonksiyone gerek kalmadı silelim
DROP FUNCTION id_duzenle();

bu arada bu yönetimin düzgün olabilmesi için bu sırada bu tablo için her hangi
bir işlemin yapılmaması gerekebilir. (işlem sırasında yapılacak insert
işlemleri seq sırasını bozabilir.)

Not: söz dizim hataları olabilir denemedim.

--
Saygılar && İyi çalışmalar
Timu EREN (a.k.a selam)

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Erkin Tek 2006-11-16 06:30:46 Fwd: Re: tekil olmayan kolona tekil anahtar eklesek?
Previous Message Erkin Tek 2006-11-15 09:51:41 tekil olmayan kolona tekil anahtar eklesek?