<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thexpot.net &#187; Veritabanı</title>
	<atom:link href="http://www.thexpot.net/tag/veritabani/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thexpot.net</link>
	<description>C++ is a gift from sadists to masochists</description>
	<lastBuildDate>Wed, 16 Nov 2011 08:28:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PostgreSQL üzerine</title>
		<link>http://www.thexpot.net/2006/02/postgresql-uzerine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=postgresql-uzerine</link>
		<comments>http://www.thexpot.net/2006/02/postgresql-uzerine/#comments</comments>
		<pubDate>Tue, 28 Feb 2006 14:56:35 +0000</pubDate>
		<dc:creator>idursun</dc:creator>
				<category><![CDATA[Yazılar]]></category>
		<category><![CDATA[Veritabanı]]></category>

		<guid isPermaLink="false">http://idursun.webfactional.com/blog/?p=38</guid>
		<description><![CDATA[Ingres, 1976 yılında Berkeley Üniversitesinde geliştirilmeye başlayan unix tabanlı RDBMS'dir. 1986 yılında Michael Stonebraker tarafından Ingres veritabanının bir uzantısı olarak geliştirilmeye başlanan RDBMS'ye postgres - <em>ingres'den sonra gelen, post-gres</em>- adını verdi. Bu projenin geliştirilmesindeki amaç "nesne ilişkili" bir yapı kullanarak veri saklamaktı. Aslında PostgreSQL ORDBMS olarak nitelendirilebilir.<p class="read-more"><a href="http://www.thexpot.net/2006/02/postgresql-uzerine/">Read more &#187;</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.thexpot.net/2006/02/postgresql-uzerine/" title="PostgreSQL üzerine"></a><p>Ingres, 1976 yılında Berkeley Üniversitesinde geliştirilmeye başlayan unix tabanlı RDBMS&#8217;dir. 1986 yılında Michael Stonebraker tarafından Ingres veritabanının bir uzantısı olarak geliştirilmeye başlanan RDBMS&#8217;ye postgres &#8211; <em>ingres&#8217;den sonra gelen, post-gres</em>- adını verdi. Bu projenin geliştirilmesindeki amaç &#8220;nesne ilişkili&#8221; bir yapı kullanarak veri saklamaktı. Aslında PostgreSQL ORDBMS olarak nitelendirilebilir.
Proje, 90&#8242;lı yıllara kadar geliştirilmeye devam etti. Daha sonra Michael StoneBreaker&#8217;ın asistanları 1996 yılında Postgres&#8217;i bir adım ileri taşıyarak PostgreSQL adıyla geliştirmeye devam ettiler. O zamandan bu zamana kadar bir çok özellikle zenginleştirilen PostgreSQL, sağlam yapısı ile nam salmıştır. Windows port&#8217;u ise 7. sürümde gerçekleşti.
PostgreSQL,
<ul>
    <li>Stored Procedures,</li>
    <li>Triggers,</li>
    <li>Primary/Foreign Keys</li>
    <li>Sequences,</li>
    <li>Views</li>
</ul>
özelliklerinin yanında
<ul>
    <li>Inheritance</li>
    <li>Operator Classes</li>
    <li>Partial Indices</li>
    <li>Rules</li>
</ul>
gelişmiş özelliklerde sunuyor.
<span id="more-38"></span>
Bu özelliklerden bazıları:
<strong>Stored Procedures</strong>
PostgreSQL&#8217;de stored procedure&#8217;ler PL/TCL, PL/pgSQL, Java, C++, Ruby, PHP gibi dillerde yazılabilir.
<pre class="prettyprint">create or replace function
   stok&lt;em&gt;performans2(kod varchar(10))
   returns double precision as $$
declare
  stok&lt;&#47;em&gt;islem&lt;em&gt;rec record;
  stok&lt;&#47;em&gt;rec record;
  performans  integer := 0;
  toplam integer := 0;
begin
  select into stok_rec * from stok where kod = ?kod;
  if not found then
     raise exception &#39;% kodlu stok bulunamadı!&#39;,?kod;&lt;&#47;p&gt;

&lt;p&gt;for stok&lt;em&gt;islem&lt;&#47;em&gt;rec in
    select * from stok&lt;em&gt;islem
    where stok&lt;&#47;em&gt;kodu = ?kod
    loop
     if stok&lt;em&gt;islem&lt;&#47;em&gt;rec.tip = 1 then
        performans := performans
            + stok&lt;em&gt;islem&lt;&#47;em&gt;rec.miktar * fiyat * 2.7;
     else
        performans := performans
             + stok&lt;em&gt;islem&lt;&#47;em&gt;rec.miktar * fiyat;
     end if;
     toplam := toplam + 1;
  end loop;&lt;&#47;p&gt;

&lt;p&gt;return performans &#47; toplam;
end;
$$ language plpgsql;</pre>
<strong>Partial Indices (Kısmi İndex)</strong>
Sadece belirli koşula sahip kayıtlar için index oluşturabilirsiniz. Örneğin stok<em>islem tablosunda 2006 yılına ait kayıtlar için bir index oluşturulabilir.
<pre class="prettyprint">create index idx&lt;&#47;em&gt;stok&lt;em&gt;islem&lt;&#47;em&gt;2006 on stok&lt;em&gt;islem(tarih)
  where extract(year from tarih) = 2006;</pre>
Dolayısıyla şişmiş bir stok</em>islem tablosunda tüm kayıtlar için bir index oluşturmak yerine yılları baz alarak index oluşturmak performansı arttıracaktır.</p>

<p><strong>Rules (Kurallar)</strong>
Tablodaki kayıtlar üzerinde yapılan işlemler için kurallar tanımlayabilirsiniz. Örneğin stok tablosundan bir kayıt silindiğinde log tablosuna bu işlemin kaydını tutan bir kural
<pre class="prettyprint">create or replace rule stok&lt;em&gt;rule as
   on delete to stok&lt;&#47;em&gt;islem
   do insert into stok&lt;em&gt;islem&lt;&#47;em&gt;log
      values(current&lt;em&gt;timestamp,&#39;DEL&#39;,old.stok&lt;&#47;em&gt;kodu,current&lt;em&gt;user);</pre>
şeklinde yazılabilir. Tabi bu işlemler trigger kullanılarakta yapılabilir fakat bazı durumlarda trigger yerine rule tercih etmek performans kazancı sağlayabilir çünkü triggerlar genelde her kayıt için teker teker çalışırken rule&#8217;lar birden fazla kayıt için aynı anda kullanılabilir.
<strong>Geçici Tablolar</strong>
PostgreSQL select ifadeleri kullanarak  geçici veya kalıcı tablolar yaratmanıza izin verir.
<pre class="prettyprint">create temp table stok&lt;&#47;em&gt;yedek as select * from stok;</pre>
<strong>Import/Export (İthal/ihraç)</strong>
PostgreSQL&#8217;de bir tablodaki tüm veriler bir dosyaya kaydedebilir ve bir dosyadan geri yükleyebilirsiniz.
<pre class="prettyprint">copy stok to &#39;.&#47;stok.kopya&#39;;</pre>
<pre>copy stok from './stok.kopya';</pre>
<strong>Partioned Tables (Parçalanmış Tablolar)</strong>
PostgreSQL&#8217;de verilerin tamamını bir tabloda saklamak yerine verileri belli koşullara göre farklı tablolara kaydetmek mümkündür. Bunu yapmak için Inheritance ve Rule mekanizması kullanılır. Örneğin depo ve depo işlem diye tablolar oluşturalım.
<pre class="prettyprint">create table depo (
  id serial not null primary key,
  kod varchar(10),
  adi varchar(30)
);&lt;&#47;p&gt;

&lt;p&gt;create table depo&lt;em&gt;islem (
   id serial not null primary key,
   depo&lt;&#47;em&gt;id integer not null
      references depo(id)
      on delete restrict
      on update cascade,
   tip smallint,
   tarih date default current&lt;em&gt;date
);</pre>
Depo</em>islem tablosundaki kayıtları, kayıdın yılına göre depo<em>islem</em>2005, depo<em>islem</em>2006 adlı tablolara ayırmak istiyoruz. Bunun için depo<em>islem tablosundan bu tabloları türetmemiz lazım.
<pre class="prettyprint">create table depo&lt;&#47;em&gt;islem&lt;em&gt;2005() inherits(depo&lt;&#47;em&gt;islem);
create table depo&lt;em&gt;islem&lt;&#47;em&gt;2006() inherits(depo&lt;em&gt;islem);</pre>
Depo</em>islem<em>2005 ve 2006 tabloları depo</em>islem tablosuyla aynı alanlara sahip. Bu noktada depo<em>islem tablosuna kaydedilmek üzere yollanan kayıtları yılları baz alarak ayrıştırmamız lazım ve bunu rule ile yapabiliriz.
<pre class="prettyprint">create or replace rule depo&lt;&#47;em&gt;islem&lt;em&gt;2005&lt;&#47;em&gt;rule as
on insert to depo&lt;em&gt;islem
where extract(year from tarih) = 2005
do instead
  insert into depo&lt;&#47;em&gt;islem&lt;em&gt;2005(depo&lt;&#47;em&gt;id,tip,tarih)
  values(new.depo_id,new.tip,new.tarih);&lt;&#47;p&gt;

&lt;p&gt;create or replace rule depo&lt;em&gt;islem&lt;&#47;em&gt;2006&lt;em&gt;rule as
on insert to depo&lt;&#47;em&gt;islem
where extract(year from tarih) = 2006
do instead
  insert into depo&lt;em&gt;islem&lt;&#47;em&gt;2006(depo&lt;em&gt;id,tip,tarih)
  values(new.depo&lt;&#47;em&gt;id,new.tip,new.tarih);</pre>
Bu kadar. Çok fazla SQL yazmak gerekiyor ama sağlam bir yapı oluşturmaya çalışıyorsak bundan yakınmamalıyız.
<pre class="prettyprint">select * from depo&lt;em&gt;islem;
-- tüm depo&lt;&#47;em&gt;islem kayıtlarını döndürür.
select * from depo&lt;em&gt;islem&lt;&#47;em&gt;2006;
-- sadece 2006 yılına ait işlemleri döndürür.</pre>
Postgre SQL  <a href="http://www.postgresql.org" target="_blank">http://www.postgresql.org</a> adresinde ikamet etmektedir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thexpot.net/2006/02/postgresql-uzerine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

