[Linux-programlama] Re: PostgreSQL - lo_export?

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Volkan YAZICI (yazicivo@ttnet.net.tr)
Date: Mon 13 Jun 2005 - 09:26:40 EEST


Merhaba,

On Fri, Jun 10, 2005 at 08:37:37PM +0300, Ahmet ERDOGAN wrote:
> C++ kullanarak lo_import ile veritabanıma gönderdiğim bir resim dosyasını
> lo_export ile almaya çalışıyorum ancak dosyayı sunucu'nun data klasörüne
> export ediyor.

LO fonksiyonları sunucu[1] ve istemci[2] taraflı olmak üzere ikiye
ayrılırlar. Siz buradan anladığım kadarı ile (çünkü gerçekleştirmek
istediğiniz LO işlemi sunucu tarafında meydana geliyor) sunucu taraflı
LO fonksiyonlarını kullanıyorsunuz, halbuki istediğiniz şey istemci
taraflı LO fonksiyonları.

[1] www.postgresql.org/docs/7.8/interactive/lo-funcs.html
[2] www.postgresql.org/docs/7.8/interactive/lo-interfaces.html

İkisi hakkında çok yüzeysel de olsa bahsetmeye çalışayım.

Sunucu taraflı LO fonksiyonları:
  SQL sorgusu şeklinde karşı tarafa iletilir ve üzerinde işlem yapacağı
  dosyalar sunucu üzerinde bulunur. Şöyle ki:
  PQexec(conn, "SELECT lo_import('/tmp/example.tar')");
  satırı C/C++ programınızda, sunucuya ilgili SELECT sorgusunu iletip,
  size oluşacak LO kaydının OID değerini döndürecektir. Yalnız burada
  dikkat etmeniz gereken en önemli şey /tmp/example.tar dosyasının
  sunucu üzerinde yer alıyor olmasıdır. (Bir de şunu unutmamak gerekir
  ki, sunucu taraflı LO fonksiyonlarını kullanabilmek için,
  veritabanı superuser'ı (sistem superuser'ı ile karıştırmayalım)
  olmanız gerekir.)

İstemci taraflı LO fonksiyonlar:
  Kütüphane tarafından sağlanan C/C++ fonksiyonları ile karşı tarafa
  iletilir ve üzerinde işlem yapacağı dosyalar istemci üzerinde bulunur.
  Şöyle ki:
  lo_import(conn, '/home/kernel/current.img');
  satırı C/C++ programınızda, libpq (yada libpqxx) kütüphanesi
  tarafından sağlanan lo_import() fonksiyonunu kullanarak, istemci
  üzerindeki /home/kernel/current.img dosyasının sunucu üzerinde
  kaydedilmesini sağlar. Fonksiyon sonuç olarak (başarılı olması
  durumunda) oluşan LO kaydının LOID değerini ya da (hatalı olması
  durumunda) InvalidOid değerini döndürecektir.

> bu dosyayı istemci makinaya nasıl aldırabilirim ?

İstemci taraflı LO fonksiyonlarını kullanarak.

> biraz araştırma yaptım ve lo_oid diye bir fonksiyonla karşılaştım
> bunu ilk kez duyuyorum aydınlatırsanız sevinirim

LO kayıtları veritabanın yapısının dışında, apayrı bir tabloda
barındırılırlar: pg_largeobject. Bu tablonun iç yapısı ise şu
şekildedir:

=> \d pg_largeobject
Table "pg_catalog.pg_largeobject"
 Column | Type | Modifiers
--------+---------+-----------
 loid | oid | not null
 pageno | integer | not null
 data | bytea |
Indexes:
    "pg_largeobject_loid_pn_index" UNIQUE, btree (loid, pageno)

Sanırım bir LO için OID'in ne anlama geldiğini (loid sütununa bakarak)
şimdi daha iyi anlamaşsınızdır.

LO fonksiyonların hakkında daha ayrıntılı bilgi için PostgreSQL'in kendi
dökümantasyonundan yararlanabilirsiniz.

İyi çalışamalar.

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.