Oracle'dan PostgreSQL'e geçiş

Benzer belgeler
Oracle'dan PostgreSQL'e geçiş

PostgreSQL Veritabanı Sunucusu Devrim GÜNDÜZ.

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

PostgreSQL ve PL/pgSQL

Oracle da kullanılan veri tipleri:

PostgreSQL ve PL/pgSQL

Laboratuvar 2 Tek Kayıt Fonksiyonları

PL/pgSQL SQL Yordamsal Dili

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

Veritabanı Tasarımı. Büyük/Küçük Harf ve Karakter İşleme

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Mysql Veritabanı Komutları

PHP+Memory Cache+PostgreSQL Kullanarak Performanslı Veritabanı Uygulaması Geliştirme

1 ORACLE 11G DATABASE SERVER LE

Fonksiyonlar, Count, Sum, Avg, Max, Mın, Lower, Upper, Length, Round, Mod, Left, Right, Concat, If

VERİ TABANI ve YÖNETİMİ

PostgreSQL - Yeni dönemdeki yeri

6 Aritmetiksel Operatörler ve Hazır Fonksiyonlar

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

PostgreSQL - Yeni dönemdeki yeri

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

ORACLE DERS 1 SQL E GİRİŞ

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

IN ve NOT IN Tablodaki alan içeriklerine ulaşmak için IN deyimi kullanılır.

Veritabanlarına ve SQL'e Giriş. Devrim GÜNDÜZ. Teknoloji Destek Merkezi --

UTL_FILE PERFORMANSI

SQL e Giriş. Uzm. Murat YAZICI

«BM364» Veritabanı Uygulamaları

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Veritabanına Uygulanması

2- Total de 8000 byte yer tutup 4000 karakter olarak kullanabildiğimiz tip aşağıdakilerden hangisidir?

Bir çeşit prosedür. Ancak bu prosedür kendiliğinden çalışır. Çalışması için tabloya veri eklemek, veri silmek, veri değiştirmek yeterlidir.

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Kodlamadan Dağıtıma PostgreSQL'de Eklenti Geliştirmek Burak Yücesoy

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Microsoft SQL Server Sorgulama

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Postgresql: Web Programcısı için Gündelik İpuçları Postgres 2014 Türkiye

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

Birden Çok Tabloda Sorgulama (Join)

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

Veri Tabanı-I 9.Hafta

Unutulmuş Özellikler: Oracle Veritabanına Yaptığınız Yatırımı Sonuna Kadar Kullanın

PostgreSQL Veritabanı Sunucusu. 8.2 neler getiriyor?

PostgreSQL ile Kümeleme Teknikleri

SQL TRIGGERS (Tetikleyiciler)

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

SQL Sorgulama Dili,Yerel SQL ve Dil Takımı

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

VIEW LERDE SQL HINT KULLANIMI

Veritabanı Tasarımı. Veri Türleri Kullanma

HP Yazılım Zirvesi - İstanbul 20 May Wyndham Grand Levent Erdem Alaşehir / Finansbank Güvenlik Olay Korelasyonunda Büyük Veri Kullanımı

Android Studio TextView ve EditText Öğr.Gör. Utku SOBUTAY

PostgreSQL ile NoSQL. Gereksinimlerinizi Karşılamak

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Veri Tabanı Programlamaya Giriş

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

VERİ TABANI YÖNETİM SİSTEMLERİ II. 4. SQL PROGRAMLAMADA PROCEDURE ve FUNCTION

3 Sql Veri Tipleri. Veritabanı 1

YAPISAL SORGULAMA DİLİ (SQL)

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Veritabanı Tasarımı. İndeksler ve Eşanlamlar

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

ACCESS PLATFORMUNDA SQL

08221 Veri Tabanı II. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Eki Öğr. Gör. Murat KEÇECĠOĞLU

Her bölüm için kısa bazı girişler yapılacak ve bölüm içerisinde anlatılacak olan konuların genel başlıkları belirtilecektir.

Gruplama (aggregate) fonksiyonları bir dizi değer üzerinde hesaplama yaparlar ve bir sonuç

İNTERNET TABANLI PROGRAMLAMA- 12.ders

Bölüm 4: DDL Veri Tanımlama Dili

EXISTS VE NOT EXISTS fonksiyonları

Her Yönüyle SQL Enjeksiyonu. OWASP-Türkiye Bünyamin Demir

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

«BM364» Veritabanı Uygulamaları-2

DĐNAMĐK ve STATĐK SQL KULLANMANIN PERFORMANSA ETKĐSĐ

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

NESNEYE DAYALI VERİTABANLARI

Veritabanı Yönetim Sistemleri (PL/pgSQL - SQL Procedural Language)

EROL AKGÜL

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

Örnek: HAFTA12B isimli bir kullanıcı tanımlayalım. Bu kullanıcıya gerekli yetkileri verelim.

3 Sql Veri Tipleri ve Örnek Veritabanı Tasarımı. Veritabanı 1

SQL e GİRİŞ. Çağlar Ülküderner caglar@tubitak.gov.tr

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

Veritabanı Tasarımı. SQL Deyimi Anatomisi

SQL Kod ile Tablo Oluşturma

KULLANICI TANIMLI FONKSİYONLAR

Transkript:

Oracle'dan PostgreSQL'e geçiş Devrim GÜNDÜZ PostgreSQL Danışmanı devrim@gunduz.org devrim@postgresql.org[.tr] devrim@commandprompt.com

Oracle'dan PostgreSQL'e geçiş Bu seminer 1 saatte bitmez sanıyorum; 3 saatlik seminer slotu istiyoruz! :)

Ajanda 1. Bu geçiş neden olmalı? 2. Genel durum özeti 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Ajanda 1. Bu geçiş neden olmalı? 2. Genel durum özeti 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Bu geçiş neden olmalı? (Peter E.) Oracle'da Tom var: Ask Tom: http://asktom.oracle.com/ PostgreSQL'de Tom Lane var! Ask Tom: tgl@sss.pgh.pa.us : )

Bu geçiş neden olmalı? Maliyet Açık kaynak kod Gelişmiş özellikler Daha büyük destek imkanı Güvenirlik...

Teknik özellikler PostgreSQL birçok, birçok dili destekler. Bu dillerde fonksiyonlar yazabilirsiniz: Java, PHP, Perl, TCL, Ruby, TK, Python, C, C++, Bash(!),...

Ajanda 1. Bu geçiş neden olmalı? 2. Genel durum özeti 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Teknik olmayan bileşenler İdari sıkıntılar Yazılım aktarma süreci İhale süreci! Çalışan uygulamanın değiştirilmesi... (Bitmez dertler)

Teknik olmayan bileşenler Bir sihirbaz yok ortada; birçok işi kendiniz elle yapmak zorunda kalabilirsiniz. %40, %40 ve %20 durumu :) Çok şanslı %40, şanslı %20 ve Oracle'da kalması gereken %20! SQL standartlarına uygun olmayan yazılımların standartlara çekilmesi süreci...

Teknik olmayan bileşenler Yazılım aktarma süreci demiş miydik? Yönetim süreci demiş miydik? Destek imkanları demiş miydik? (Üstteki soruları tekrar sormuş muyduk?

Yöntem Tüm sürecin mutlaka belgelenmesi gereklidir. Kullandığınız yan yazılımları geliştirenlere tecrübelerinizi aktarın; bunlardan başkaları da faydalansın. Sürüm kontrol yazılımı kullanın. Test araçları geliştirin. Hata şansınızın az olduğunu unutmayın.

Ajanda 1. Bu geçiş neden olmalı? 2. Genel durum özeti 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Sayısal veri tipleri Oracle PostgreSQL Number (precision, scale) smallint,int2 (2byte) int,integer (4 byte) bigint, int8 (8 byte) number(p,s) numeric(p,s) real (4 byte) double (8 bytes)

Sayısal operatörler <, >, <=, >= +,, *, / %, ^ /, /, @,!

Sayısal fonksiyonlar abs(), mod(), ceil(),sqrt(), sin(), cos(), tan(), cot(), random(), round(),...

Karakter veri tipleri Oracle PostgreSQL varchar2, nvarchar2 char,nchar varchar char Clob, nclob text

Karakter veri tipleri Birçok ortak karakter fonksiyonu: lower(), upper(), convert(), md5(), char_length(), encode(), decode(), lpad(), rpad(), ltrim(), rtrim(), substr(), regex_replace(),... Karakter karşılaştırma operatörleri LIKE, ILIKE, <, >, <=, >=, <>, ve birçok regexp operatörü (!~, ~, vs)

Zamansal veri tipleri Oracle PostgreSQL date interval timestamp date (bazen timestamp without timezone da olabilir) interval timestamp

Zamansal fonksiyonlar Oracle PostgreSQL sysdate TRUNC(sysdate) sysdate + 3.5 Now(), current_timestamp() current_date, date_trunc() (orafce!) current_timestamp + '84 hours'::interval

Zamansal fonksiyonlar Orafce içinde birçok fonksiyon: next_day(), last_day(), add_months()

Binary veri tipleri Oracle'daki bfile'ın karşılığı PostgreSQL'de large object'tir. Oracle'daki raw bfile'ın karşılığı ise bytea'dır. Bytea 1 GB'dan az veriler için kullanılır. Large objectler TOAST edilirler.

PostgreSQL'in özel veri tipleri Inet, macaddr, cidr gibi veri tipleri ile network bilgilerini tutabilirsiniz. Point, box, line, lseg, circle vs ile GIS projelerinizdeki bilgilerinizi de tutabilirsiniz. Boolean veri tipi

Genel sözdizimi ORACLE'DA NESNELER BÜYÜK HARFE ÇEVİRİLİRLER. postgresql'deyse tüm nesneler küçük harfe çevirilirler. bir nesnenin büyük harfli olması gerekiyorsa o nesne adı çift tırnak içine yazılır.

Genel sözdizimi dual tablosu PostgreSQL'de yoktur. Bunu kendini yaratabilirsiniz, ya da orafce kullanabilirsiniz. PostgreSQL 8.4'e kadar kolonlarda takma ad konurken AS mutlaka konmalıydı. Oracle'da bu yoktur; 8.4 ile bu kısıtlama kaldırıldı.

Fonksiyonlar Genel olarak sözdizimlerinde büyük farklılıklar yoktur. Orafce kullanarak birçok Oracle fonksiyonunu PostgreSQL içinde kullanabilirsiniz.

Sequence Oracle: SELECT sequence_adı.nextval FROM dual; PostgreSQL: SELECT nextval('sequence_adı');

Outer Joinler Oracle: SELECT * FROM t1,t2 WHERE t1.c1 = t2.c2(+) PostgreSQL: SELECT * FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c2

Outer Joinler (Peter Eisentraut) SELECT * FROM t1, t2, t3 WHERE t1.c1 (+) = t2.c2 AND t3.c3(+) = t2.c2 PostgreSQL: SELECT * FROM t1 RIGHT JOIN t2 ON (t1.c1 = t2.c2) LEFT JOIN t3 ON (t3.c3 = t2.c2)

SQL dönüşümleri Oracle'daki rownum, PostgreSQL'de LIMIT olur ve sözdizimi bir miktar değişir: Oracle: SELECT * FROM (SELECT customer_id FROM payments ORDER BY amount DESC) WHERE rownum <= 10; PostgreSQL: SELECT customer_id FROM payments ORDER BY amount DESC LIMIT 10;

SQL dönüşümleri (Brian) Oracle: SELECT * FROM (SELECT customer_id FROM payments ORDER BY amount DESC) WHERE rownum > 20 AND rownum <= 30; PostgreSQL: SELECT customer_id FROM payments ORDER BY amount DESC LIMIT 20 OFFSET 10;

Window functions PostgreSQL'in herhangi bir kararlı sürümünde Window functionlar yok. 8.4 için geliştiriliyor; şu anda kod gözden geçirme aşamasında. 8.4'ü bekleyebilir; ya da sorguları baştan yazıp SP / partitioning çözümlerini kullanabilirsiniz. 8.4: Mart 2009 civarı bekleniyor.

Oracle'dan PostgreSQL'e geçiş Minus - Except Oracle'da MINUS hızlı çalışır. PostgreSQL'de doğrudan karşılığı yoktur. EXCEPT ile değiştirmek gereklidir.

Oracle'dan PostgreSQL'e geçiş - Trigger Oracle'da triggerların kendisine ait söz dizimi vardır. PostgreSQL'de ise triggerlar daha önceden tanımlanan fonksiyonların çağırılmasıdır.

Oracle'dan PostgreSQL'e geçiş - Trigger Oracle: CREATE TRIGGER trg1 AFTER... ON t1 AS BEGIN... END; PostgreSQL: CREATE OR REPLACE FUNCTION trg1_func() RETURNS TRIGGER LANGUAGE... AS $$... $$; CREATE TRIGGER trg1 AFTER ON table EXECUTE PROCEDURE trg1_func();

ROWNUM ve ROWID Oracle'daki ROWNUM'ları, daha önce gördüğümüz gibi LIMIT kullanarak tekrar yazabilirsiniz. Bir diğer alternatif de generate_series() kullanmak olabilir. ROWID ise PostgreSQL'deki ctid'ye denk gelir. Mümkünse kodun ilgili kısmını baştan yazıp bundan kurtulmak gerekli.

Oracle'dan PostgreSQL'e geçiş - XML XML bileşenleri genelde uyumsuzluk gösterir. Dönüşüm mümkündür; ancak elle kontrol gereklidir.

Oracle'dan PostgreSQL'e geçiş - Partitioning Oracle ve PostgreSQL partitioning destekler. PostgreSQL'de composite_partitioning yoktur. Range, hash ve list partitioning vardır. Oracle'ın sözdizimi PostgreSQL'e göre daha gelişmiştir. CREATE TABLE aşamasında partitioning yapılabilir. PostgreSQL'de auto partitioning 8.4 için kod gözden geçirme aşamasındadır.

Diğer konular Oracle'daki CONNECT BY için PostgreSQL'de contrib/tablefunc kullanılabilir. 8.3 için harici bir kaynakta CONNECT BY yaması bulunmaktadır.

Ajanda 1. Bu geçiş neden olmalı? 2. Bu geçiş neden olmalı? 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

PL/SQL -> PL/pgSQL dönüşümü PL/pgSQL Oracle uyumluluğunu ön plana alan internal bir dil. Aşağıdaki adreste önemli ipuçları var: http://www.postgresql.org/docs/current/stati c/plpgsql porting.html

PL/SQL -> PL/pgSQL dönüşümü 8.4 ile gelen özellikler Örnek: Default values for function arguments Fonksiyon yaratırken sözdizimi farklıdır: Oracle: CREATE FUNCTION func1 RETURN veri_tipi PostgreSQL: CREATE FUNCTION func1 RETURNS veri_tipi

PL/SQL -> PL/pgSQL dönüşümü Oracle'daki Packages PostgreSQL'de yoktur. Fonksiyonları bir araya getirmek için schema desteğini kullanabilirsiniz.

PL/SQL -> PL/pgSQL dönüşümü Cursor desteği iki veritabanında da gelişmiştir. Peter'ın örneği: Oracle: CURSOR cursor1 IS SELECT...; BEGIN FOR x IN cursor1 LOOP PostgreSQL: BEGIN FOR x IN SELECT... LOOP

PL/SQL -> PL/pgSQL dönüşümü Bu dönüşüm ayrı bir seminer konusu; burada bir nokta koyalım.

Ajanda 1. Bu geçiş neden olmalı? 2. Bu geçiş neden olmalı? 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Araçlar - Ora2Pg http://pgfoundry.org/projects/ora2pg Son zamanlarda hızlanan geliştirme süreci Oracle'daki tablo tanımlarının PostgreSQL'e aktarılmasını sağlar bunu Oracle veritabanına bağlanarak yapar. Perl ile yazılmıştır; çalışması için birkaç Perl kütüphanesi gerekecektir (Örnek: DBD Oracle)

Araçlar - Orafce http://pgfoundry.org/projects/orafce Harika bir araç. Oracle uyumluluk fonksiyonlarını PostgreSQL'e ekler. Dual tablosunu ekler : ) Oracle 10g ile test edilmiştir.

Araçlar - Ticari 2 senedir kullandığım ticari bir araç var. Oracle'dan snapshot alabiliyor; replikasyon yapabiliyor. Turkcell uygulamasını bu şekilde geçirdik.

Ajanda 1. Bu geçiş neden olmalı? 2. Bu geçiş neden olmalı? 3. SQL tümcelerinin aktarılması 4. PL/SQL'den PL/PgSQL'e geçiş 5. Geçiş araçları 6. Örnekler

Oracle'dan PostgreSQL'e geçiş - Örnekler Turkcell'deki bir uygulamayı 2 sene önce PostgreSQL'e aktardık. Büyük bir elektronik devi şu anda Oracle'dan PostgreSQL'e geçiyor. Operasyon Türkiye'den yönetiliyor. Ankara'daki en eski Oracle kullanıcılarından birisi PostgreSQL'e geçiş için yılbaşından sonra hazırlıklara başlıyor.

Kaynaklar Porting Oracle Applications to PostgreSQL Peter Eisentraut, 2008 Oracle to PostgreSQL conversion Brian Dunavant, 2007 PostgreSQL belgeleri PostgreSQL e posta listeleri Tecrübeler

Oracle'dan PostgreSQL'e geçiş Devrim GÜNDÜZ PostgreSQL Danışmanı devrim@gunduz.org devrim@postgresql.org[.tr] devrim@commandprompt.com