Re: Re: COPY ile doldurulmuş tablo

Lists: pgsql-tr-genel
From: "Ali Dereli" <derelinux(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: COPY ile doldurulmuş tablo
Date: 2006-03-10 12:19:59
Message-ID: dfbe28f10603100419g6e511178l6e94896550b789a8@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Merhaba;

İçerigini COPY komutu ile bir dosyadan doldurdugum tabloya, SQL ile yeni
kayıt ekledigimde serial tipteki sutunlar 1 den baslıyor ve dogal olarak
serial tipteki sutunda cift kayıt olusuyor.

Ne yapmam gerekir?

Saygılar.


From: "Ali Dereli" <derelinux(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: COPY ile doldurulmuş tablo
Date: 2006-03-10 12:24:45
Message-ID: dfbe28f10603100424x2f39c3b5n260d7979f23c67f1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Tekrar merhaba;

ilgili tablonun sequences degerine baktım hala 1.
COPY komutuyla eklenen kayıtlar bu degeri arttırmıyormu?
Peki nasıl arttırıcaz.?


From: "Esref Atak" <esrefatak(at)gmail(dot)com>
To: PostgreSQL Türkiye -Genel <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: Re: COPY ile doldurulmuş tablo
Date: 2006-03-10 12:55:50
Message-ID: b0e445b30603100455h41ffdba5q44641efa6c7cb371@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

Ekleme işlemleri esnasında, ID alanlarının değerlerinin bir tetik yardımıyla
bir arttırıcıdan edinilmesini sağlayabilirsiniz. Alanın türünü değiştirmeniz
gerekir tabii ki.

On 3/10/06, Ali Dereli <derelinux(at)gmail(dot)com> wrote:
>
> Tekrar merhaba;
>
> ilgili tablonun sequences degerine baktım hala 1.
> COPY komutuyla eklenen kayıtlar bu degeri arttırmıyormu?
> Peki nasıl arttırıcaz.?
>

--
Saygılar,
Eşref Atak


From: "Esref Atak" <esrefatak(at)gmail(dot)com>
To: PostgreSQL Türkiye -Genel <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: Re: COPY ile doldurulmuş tablo
Date: 2006-03-10 13:29:34
Message-ID: b0e445b30603100529g180fe1fcn26bf924870c34489@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

On 3/10/06, Ali Dereli <derelinux(at)gmail(dot)com> wrote:
>
>
>
> On 3/10/06, Esref Atak <esrefatak(at)gmail(dot)com> wrote:
> >
> > Ekleme işlemleri esnasında, ID alanlarının değerlerinin bir tetik
> > yardımıyla bir arttırıcıdan edinilmesini sağlayabilirsiniz. Alanın türünü
> > değiştirmeniz gerekir tabii ki.
> >
>
> Merhaba;
> Tesekkur ederim Ama çözümde ziyade nedeni önemli.
> Anlamadıgım neden tetik kullanmam gerektigi. Neden kendisi artmıyor.
>

Bir alanın türü "serial" yapıldığında, bir arttırıcı oluşturulur. ID
alanının varsayılan değerinin ise nextVal("ogrenci_id_seq") benzeri bir
ifade yardımıyla, bu arttırıcıdan alınması sağlanır. COPY komutu ile
kayıtlar kopyalandığında, eğer ID alanları için bir değer atanıyorsa,
varsayılan değer edinme işlevi çalışmadığından, arttırıcının değeri de
artmaz. Dolayısıyla, sonradan SQL-INSERT ile eklenen kayıtların değeri "1'den
başlar".

Ben ancak bu şekilde yorumlayabiliyorum.

--
Saygılar,
Eşref Atak


From: Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr>
To: Ali Dereli <derelinux(at)gmail(dot)com>
Cc: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: COPY ile doldurulmu
Date: 2006-03-10 20:27:08
Message-ID: 20060310202708.GA184@alamut
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg토토 커뮤니티SQL

On Mar 10 02:19, Ali Dereli wrote:
> İçerigini COPY komutu ile bir dosyadan doldurdugum tabloya, SQL ile yeni
> kayıt ekledigimde serial tipteki sutunlar 1 den baslıyor ve dogal olarak
> serial tipteki sutunda cift kayıt olusuyor.

Tablonun serial tipindeki ilgili sütünunun hangi sequence'i kullandığını
öğrenip[1], bu sequence'in değerini tablodaki toplam satır sayısına[2]
eşitleyebilirsiniz[3]. Böylece bir sonraki artışta toplam satır
sayısında kaldığı yerden arttırımı gerçekleştirir.

[1] Bunun için psql ile sağlanan \d <tablo> komutu işinizi
görecektir.
[2] SELECT count(*) FROM <tablo>;
[3] SELECT setval(...);
setval() hakkında ayrıntılı bilgi için
http://www.postgresql.org/docs/8.1/interactive/functions-sequence.html
adresine başvurabilirsiniz.

İyi çalışmalar.


From: Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr>
To: Ali Dereli <derelinux(at)gmail(dot)com>
Cc: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: COPY ile doldurulmu
Date: 2006-03-10 21:53:28
Message-ID: 20060310215328.GB184@alamut
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-tr-genel

On Mar 10 11:35, Ali Dereli wrote:
> Herkes ceşitli çözüm yolları sundu ama postgreSQL'inde çözüm sunması
> gerekirdi.
> COPY komutu calıstıktan sonra ilgili tablodaki ilk serial sutundaki en
> yüksek degeri sequence olarak atamak cokta zor olmazmıs gibi geliyor.

Bana daha çok siz pg_dump'ı doğru kullanmadınız gibi geliyor. Şöyle ki:

test=# \d seq
Table "public.seq"
Column | Type | Modifiers
--------+---------+-------------------------------------------------
s | integer | not null default nextval('seq_s_seq'::regclass)
u | integer |
v | integer |

test=# SELECT s, u, v FROM seq;
s | u | v
----+----+----
1 | 1 | 2
2 | 3 | 4
...
(12 rows)

$ pg_dump --table seq test
...
CREATE TABLE seq (
s serial NOT NULL,
u integer,
v integer
);
...
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('seq', 's'), 12, true);
...
COPY seq (s, u, v) FROM stdin;
1 1 2
2 3 4
...

Görüldüğü gibi pg_dump ile işler kolaylıkla halloluyor. Amcamlar benim
size önerdiğim setval() fonksiyonunu ise yukarıdaki gibi paşa paşa
kullanıyorlar.

İyi çalışmalar.