18 Ekim 2017 Çarşamba

HTML'de Sayfanın İstenilen Bölümünü Yazıcıdan Çıktısını Alma




HTML'de İstenilen <div ' i Yazdırma (Yazıcıdan Print Etme ):

Aşağıda bir .html sayfasının div'lere bölünerek sayfanın istenilen bölümünün nasıl yazdırılacağı hakkında basit bir örnek paylaşıyorum.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head><h1>Başlık</h1></head>
<body>

<div id="Print1">
//Aşağıdaki script linki olmadan print olayı gerçekleşmeyecektir. Print aşağıdaki .js kütüphanesini kullanıyor. 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">

//Aşağıdaki gibi yazdırma fonksiyonu tanımlanır, bu fonksiyon amaca göre div'in dışında <head> tag'ı içerisinde de tanımlanabilir.
function printDiv(divAdi)
{
 var printContents = document.getElementById(divAdi).innerHTML;
 var originalContents = document.body.innerHTML;

 document.body.innerHTML = printContents;

 window.print();

 document.body.innerHTML = originalContents;
}
</script>


  <h1>YAZDIRILAN BÖLÜM : Yazıcıdan çıktısı alınabilir. </h1>

 </div>

<div id="diger">
<h1>YAZDIRILMAYAN BÖLÜM: Yazıcıdan çıktısı alınmayacak.</h1>
</div>

//Aşağıda tanımlanan fonksiyona action vermek için button tanımladım. Burada dikkat edilecek yer buttonun type ve onclick özellikleridir. onclick olayında çağırılan fonksiyonun aynı isimde olmasına dikkat edilmeli.
<input type="button" onclick="printDiv('Print1')" value="Div Yazdır" />


İşlem bu kadar, kolay gelsin.





5 Haziran 2017 Pazartesi

Informix SQL'de Alter ve Modify Table İşlemleri


Informix SQL'de Alter Table Yapmak:


Veritabanında herhangi bir tablo üzerinde sonradan kolon açmak istediğimizde SQL dilinde Alter Table değimini kullanmamız gerekir. Kullanım şekli aşağıdaki gibidir:

//Aşağıdaki Alter Table ifadesinde oluşturulmak istenen kolon için ekstradan özellik atanmıştır. eklenecek kolonun veri tipi:char(3) alacağı Default değer ataması:'trk' ve tabloda yer alan kolonlardan hangi kolondan önce yer alacağı Before, ad_date adlı kolondan önce yer alacak.
ALTER TABLE tablo_adi ADD eklenecek_kolon_adi CHAR(3) DEFAULT 'trk' BEFORE ad_date

// Informix'de aynı anda birden fazla komutun işletilmesi için komutlar arası eklenen ayırac aşağıdaki gibidir.

^!^

ALTER TABLE tablo_adi ADD eklenecek_kolon_adi CHAR(3) DEFAULT 'trk' BEFORE ad_date



Informix SQL'de Modify Table Yapmak:

Veritabanında herhangi bir tablonun kolon özelliğini değiştirmek istediğimizde SQL dilinde Alter Modify değimini kullanmamız gerekir. Kullanım şekli aşağıdaki gibidir:


//Aşağıdaki Alter Table Modify ifadesinde tablonun özelliği değiştirilmek istenen kolonun Char karakter sayısı, yani kolonun genişliği tekrardan tanımlanmaktadır. Aynı şekilde kolonun alcağı değer tipi de değiştirilebilirdi.   

ALTER TABLE tablo_adi MODIFY degistirilecek_kolon_adi CHAR(100);

^!^


ALTER TABLE tablo_adi MODIFY degistirilecek_kolon_adi CHAR(100);






26 Mayıs 2017 Cuma

Informix'de Veritabanındaki Tabloları Listelemek




Informix'de Veritabanındaki Tüm Tabloları ve O Tabloların Alanlarını, Alan tiplerini listeleyen SQL Sorgusu:


SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column,
CASE 
  WHEN MOD(coltype,256)=0 THEN 'CHAR' 
  WHEN MOD(coltype,256)=1 THEN 'SMALLINT' 
  WHEN MOD(coltype,256)=2 THEN 'INTEGER' 
  WHEN MOD(coltype,256)=3 THEN 'FLOAT' 
  WHEN MOD(coltype,256)=4 THEN 'SMALLFLOAT' 
  WHEN MOD(coltype,256)=5 THEN 'DECIMAL' 
  WHEN MOD(coltype,256)=6 THEN 'SERIAL' 
  WHEN MOD(coltype,256)=7 THEN 'DATE' 
  WHEN MOD(coltype,256)=8 THEN 'MONEY' 
  WHEN MOD(coltype,256)=9 THEN 'NULL' 
  WHEN MOD(coltype,256)=10 THEN 'DATETIME' 
  WHEN MOD(coltype,256)=11 THEN 'BYTE' 
  WHEN MOD(coltype,256)=12 THEN 'TEXT' 
  WHEN MOD(coltype,256)=13 THEN 'VARCHAR' 
  WHEN MOD(coltype,256)=14 THEN 'INTERVAL' 
  WHEN MOD(coltype,256)=15 THEN 'NCHAR' 
  WHEN MOD(coltype,256)=16 THEN 'NVARCHAR' 
  WHEN MOD(coltype,256)=17 THEN 'INT8' 
  WHEN MOD(coltype,256)=18 THEN 'SERIAL8' 
  WHEN MOD(coltype,256)=19 THEN 'SET' 
  WHEN MOD(coltype,256)=20 THEN 'MULTISET' 
  WHEN MOD(coltype,256)=21 THEN 'LIST' 
  WHEN MOD(coltype,256)=22 THEN 'ROW (unnamed)' 
  WHEN MOD(coltype,256)=23 THEN 'COLLECTION' 
  WHEN MOD(coltype,256)=40 THEN 'LVARCHAR fixed-length opaque types' 
  WHEN MOD(coltype,256)=41 THEN 'BLOB, BOOLEAN, CLOB variable-length opaque types' 
  WHEN MOD(coltype,256)=43 THEN 'LVARCHAR (client-side only)' 
  WHEN MOD(coltype,256)=45 THEN 'BOOLEAN' 
  WHEN MOD(coltype,256)=52 THEN 'BIGINT' 
  WHEN MOD(coltype,256)=53 THEN 'BIGSERIAL' 
  WHEN MOD(coltype,256)=2061 THEN 'IDSSECURITYLABEL'
  WHEN MOD(coltype,256)=4118 THEN 'ROW (named)' 
  ELSE TO_CHAR(coltype)
END AS Type,
BITAND(coltype,256)=256 AS NotNull
  FROM "informix".systables  AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;




22 Mayıs 2017 Pazartesi

SQL'de Temp Tablolarla İşlem Yapmak





Temp tablolar local'de oluşturulan  ve db connection olduğu sürece işlevsel olan, geçici tablolardır. Session mantığı gibi, işlemi bitirip oturumu kapattıktan sonra, yani db bağlantısını kapatıp tekrar açtığımızda önceden oluşturmuş olduğumuz temp tabloya erişmemiz imkansızdır.

Konuyu bir örnek ile anlatacak olursak; örnekte genkur tablosuna önceki kayıtlarından birinin kopyasını alarak insert işlemi yapmak istiyoruz. Bunun için  genkur adındaki tablodan belirli bir tarihe ait kaydı ilk olarak geçici olarak tkur adındaki temp tablosuna aktarıyoruz, daha sonra tkur tablosuna aktardığımız kaydı güncelliyoruz, son olarak da tkur geçici tabloda güncellemiş olduğumuz kaydı genkur tablosuna aktarıyoruz. Böylece geçici (temp) tablo kullanımı sayesinde, herhangi bir tabloya önceki kayıtlarından kopya kaydı nasıl aktarılabileceğini görmüş olduk.


//Güncellemek istediğimiz kaydın temp tablosuna aktarılması

      -  SELECT * FROM genkur WHERE tarih=mdy(5,11,2017)
          INTO temp tkur


//Temp tablosuna aktarılan kaydın güncellenmesi
       - UPDATE tkur SET tarih=today


//Temp dosyasında güncellenen kaydın gerçek tabloya aktarılması
       - INSERT INTO genkur
         SELECT * FROM tkur











15 Mayıs 2017 Pazartesi

Excel'de Farklı Sayfalardaki Sütunları Karşılaştırma



VLOOKUP():

Excel'de Sheet2'deki sütuna bağlı kayıtların Sheet1'deki kayıtlarla karşılaştırılması ve farklı kayıtların filtrelenebilmesi için Sheet2'de, karşılaştırma sonucunu listelemek istediğimiz, sütuna aşağıdaki fonksiyonu tanımlamamız gerekir:



//formulde Belge No Sheet2 de karşılaştırmak istediğimiz sütun başlığına ait verilerin Sheet1 deki A:D sütunları arasında kalan veriler ile karşılaştırılması sağlanıyor. 


=VLOOKUP([@[Belge No]];Sheet1!A:D;1;FALSE)








3 Mayıs 2017 Çarşamba

Informix Database Server'da Tablolara Kullanıcı Yetkisi Verme




    SQL'de Database Tablolarına Kullanıcı Yetkisi Veren Stored Procedure:


Informix'de kullanıcılara tablo yetkisi veren procedure aşağıdaki gibi tanımlanabilir:


--- Aynı ad ile kayıtlı procedure var ise silinir. 
drop PROCEDURE if exists SET_PERMISSION

--- Informix'de işletilmek istenen iki komut arası ayıracı...
^!^  


---- stored procedure'nin oluşturulması...

CREATE PROCEDURE SET_PERMISSION()

---- procedure'de kullanılacak değişkenlerin tanımlanması..
DEFINE vYETKI char(200);
DEFINE vOWNER char(30);
DEFINE ERROR_NUMBER   INT;
DEFINE ISAM_ERROR_VAR INT;
DEFINE ERROR_DATA_VAR CHAR(255);
DEFINE vTABLOYOKHATAKODU INT;


---- hata kodlarına bakarak hata kodu karşılaştırması yapan başka bir procedure'nin çalıştırılması..
ON EXCEPTION SET ERROR_NUMBER, ISAM_ERROR_VAR, ERROR_DATA_VAR
  IF ERROR_NUMBER <> vTABLOYOKHATAKODU THEN
    RAISE EXCEPTION ERROR_NUMBER, ISAM_ERROR_VAR, ERROR_DATA_VAR;
  END IF;

END EXCEPTION;

---- procedure'de tanımlı bir değişkene const sayı ataması aşağıdaki gibidir.
LET vTABLOYOKHATAKODU=-206;


---- Select sorgusunda sonucu gelen tüm tabloları check eden foreach döngüsü...
FOREACH CR1 FOR

---- Select sonucunun procedure'de tanımlı vYETKI değişkenine atanması...
select 'GRANT ALL ON '||trim(OWNER)||'.'|| TRIM(TABNAME) || ' TO PUBLIC' into vYETKI
from systables
where ((tabtype='V' or statlevel='A') and tabname not like 'sys%')

---- vYETKI değişkenine atanan sonuçların execute edilmesi..
EXECUTE IMMEDIATE vYETKI;


---- döngü ve procedure'nin sonlandırılması...
END FOREACH;
               
END PROCEDURE  






2 Mayıs 2017 Salı

Informix Database Server SQL'de Veri Aktarımı



      SQL Dilinde Database Sunucular Arası Veri Aktarımı:


SQL 'de iki database arası veri aktarımı yapmak diğer yöntemlere göre çok daha hızlı olduğundan 'big data' database işlemlerinde zaman kazanabiliriz.


ortak@deneme1domain adresindeki veritabanından, ortkod tablosunda tipleri 9008 ile 9017 arasında olan kayıtları, ortak@deneme2domain adresindeki veritabanının ortkod tablosuna ekleme işlemi şu şekilde yapılır:

insert into ortak@deneme2domain:ortkod
select * from ortak@deneme1domain:ortkod
where tip between 9008 and 9017





12 Nisan 2017 Çarşamba

Informix Database Server DB Bağlantı Ayarları




  Informix DB Server'de DB Bağlantı Ayarları için Yapılması Gerekenler:



Informix bağlantısı için;


1) ..windows\System32\drivers\etc\hosts dosyasında bağlanmak istenen DB'nin ip adresi ve domaininin tanımlı olması gerekir.

2) Informix Setnet32.exe programının bilgisayara yüklü olması gerekir.

3) dbxconnections.ini dosyasının DB configurationu yapılır.

4) Luxena\lxdbexpinf.dll
    Luxena\lxdbexpinfpro.dll  Luxena'nın .dll dosyaları windows\System32 dizinine atılır.
 
5) Informix Setnet32 Ayarları:

   Server Information Tab: Informix Server için, dbxconnections.ini dosyasında yer alan DB adları                                                 altında hangi DB'ye bağlanmak istiyorsak o DB adının altında yer alan                                                   configuration bilgilerinden yararlanarak gerekli ayarlamalar yapılır.
                                          HostName için, bağlanılacak sunucunun ip adresi yazılır.
 
   Host Information Tab: Current Host için, bağlanılacak sunucunun ip adresi yazılır.
                                        User Name için, veritabanı kullanıcı adı yazılır.
                                        Password için, veritabanı kullanıcı şifresi yazılır.

6) Delphi7 components tabında yer alan dbExpress componentten SQLConnection nesnesi uygulamanın formuna eklenir. Nesnenin properties'inden;
                     DriverName        :InformixLuxena (system32'ye eklemiş olduğumuz Luxena\dll)
                     ConnectionName:dbxconnections.ini ' de yer alan DB bağlantılarından configurationunu                                                   yapmış olduğumuz DB'nin adı yazılır.

    Son olarak da nesnenin ilgili DB'ye bağlanıp bağlanmadığını test etmek için Connected                       alanı True yapılır.





Visual Studio'da Proje Derleme



                
         Visual Studio'da C# Projesini Derleme :


Visual Studio'da C# Projesi Derleme Adımları:

1) İlk önce derlemek istediğimiz proje, Visual Studio'nun hangi sürümünde yapılmış ise o sürümü ile çalıştırılır.

2) Visual Studio'nun üst tarafında yer alan 'Debug' kısmı 'Release' olarak ayarlanır.

3) Proje F6 tuşu ile veya Solution üzerinden Build edilir.

4) 'Release'  seçeneği tekrardan 'Debug' olarak ayarlanarak proje kapatılır.

5) Son olarak, projenin (.sln uzantısı) adresi herhangi bir web tarayıcıdan girilerek enter tuşuna basılır, herhangi bir hata ile karşılaşılmaz ise compile işlemi sorunsuz bitmiş demektir.

16 Mart 2017 Perşembe

SQL'de Birden Fazla Alanı Tek Alan Yapmak




           SQL'de Aynı Kolondaki Birden Fazla Alanı Tek Alan Yapmak:



   SQL'de bir kolona ait birden fazla alandan dönen verileri tek bir alan içerisine yazdırmak için aşağıdaki gibi sorgu yazabiliriz:



SELECT surid, string_agg(sqql, '+') AS sqql_list
FROM  dyndeneme d, dyntestsym t where t.oid=d.oidtestsym and surid=surecid
GROUP  BY 1 // sorgudaki string_agg() fonksiyonu ile sqql adındaki kolondan dönen değerlerin arasına '+' işareti koyarak tek bir alana yazıyor.



15 Mart 2017 Çarşamba

Linux (Centos 7) Firewall Ayarları ve Port Açma



                             

                                          CentOS 7 Firewall Port Açma 



firewall-cmd --list-all : Makinede açık ve kullanılıyor olan portların listesini ekranda gösterir.

firewall-cmd --add-port=8733/tcp --permanent : firewall üzerinde 8733 portunun açılması.



/etc/firewalld altında firewalld servisinin ayarları bulunmaktadır.
/etc/firewalld/zones/public.xml altında varsayılan zoneda açılan portlar saklanmaktadır.
–permanent parametresi değiştirilen portların kalıcı olarak saklanmasını sağlar.
firewall-cmd --reload : firewall yeniden başlatılır.

                                                               
                                                  Firewall Ayarları

firewall-cmd --permanent --get-services : firewall servislerine erişim.
systemctl status firewalld : firewall aktif mi değil mi ?.
firewall-cmd --state : firewall aktif mi değil mi ?.
systemctl stop firewalld : firewall kapatma.
systemctl start firewalld : firewall açma.




10 Mart 2017 Cuma

PHP'de String İşlemleri


    

       PHP'de explode() Fonksiyonu: 

Metin ifadeleri bir ayraç ile parçalamak için explode() fonksiyonu kullanılır. Bu fonksiyon, string ifade içinde belirlenen ayraç bulunduğu müddetçe metni parçalar ve bir dizi olarak geri döndürür.


Sözdizimi: explode(ayraç,string,limit)

Ayraç: gereklidir.
String: gereklidir.
Limit: isteye bağlıdır. Limit pozitif ise en çok belirtilen sayıda eleman içerir. ve metnin kalanı son elemana yerleştirilir.Limlit negatifse son limlit eleman hariç tüm elemanlar döndürülür. Limit sıfırsa dizi, 1 eleman gösterilir.

$meyve "Elma,Armut,Kiraz,Muz,Şeftali,nar";


$dizi explode (",",$meyve,-2);


echo '<pre>';


print_r ($dizi);


echo '</pre>';
Çıktısı:

  Array
(
    [0] => Elma
    [1] => Armut
    [2] => Kiraz
    [3] => Muz
)

Client bağlantısı ile veritabanından dizi şeklinde dönen değerlerin 
sayfada listelenmesi: 


try {       
     $client = new SoapClient ( $url . "?wsdl", $params );
     $data = $client-> __soapCall("stringprocess", array($cduser));

     $menu = explode(" ", $data. "\n");
         
     foreach ($monu as $key => $value)
     {
      echo "<p>".$key."</p>";//dizi elemanlarının indexlerini tutar
      echo "<p>".$value."</p>";//dizi elemanlarını tutar
      echo "<hr />";
     }

     }
catch(Exception $e) {
 die($e->getMessage());
}


9 Mart 2017 Perşembe

PHP ile Sistem Tarih ve Saatini Yazdırmak



   
               PHP'de sistem tarihini projelerimizde kullanmak için aşağıdaki kodları yazabiliriz. 


<?php

$tarih = date("d.m.Y"); //Sistemde görünen güncel tarihi almak için
$saat = date("H:i:s"); //Sistemde görünen güncel saati almak için

echo "Tarih :".$tarih."<br>";
echo "Saat:".$saat;
?>

7 Mart 2017 Salı

PHP - Oracle Fonksiyonunun Kullanımı




   PHP'de Oracle Fonksiyona Parametre Gönderme:





 function data_analiz($tablo, $kosul, $islem) // client tarafından bu fonksiyon çağrılıyor, kullanıcının girdiği veriler post metodu ile buraya düşüyor
   {
      $conn = "(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = btctestdb.baticim.com.tr)(PORT = 1541))(CONNECT_DATA=(SID=BTCMTEST)))" ;//oracle bağlantısı
 

    if($conn = OCILogon("SOFTEXPERT", "SOFTEXPERT", $conn))//bağlantıda kullanıcı şifre kontrolü
    {
$stid = oci_parse($conn, 'begin apps.xxbtc_softexpert_sorgu_f(:p_tablo, :p_kosul, :p_islem); end;');//burada oracle tarafında tanımlı olan fonksiyonu çağırıyorum

//ALTERNATİF KULLANIM OLARAK, ORACLE'da TANIMLI FONKSİYONUN SELECT SORGUSUNDA KULLANIMI
$stid = oci_parse($conn, "Select apps.xxbtc_softexpert_sorgu_f(:p_tablo, :p_kosul, :p_islem) as deger from dual");


        oci_bind_by_name($stid, ':p_tablo', $tablo);// kullanıcının gireceği değerlerin aktarılması
        oci_bind_by_name($stid, ':p_kosul', $kosul);
        oci_bind_by_name($stid, ':p_islem', $islem);


//ALTERNATİF KULLANIM OLARAK, SELECT SORGUSUNDA as deger ADI ÜZERİNDEN FONKSYİON SONUCUNUN DEĞİŞKENE AKTARILMASI
while (oci_fetch($stid)) {
    $id = oci_result($stid, [0]);
  }
   return $id;
       
        $sonuc = oci_execute($stid);

     }
      else
      {
        $err = OCIError();
       echo "Baglanti Hatasi." . $err[text];
      }
   
      return $sonuc;
   
   }

6 Mart 2017 Pazartesi

PHP - SOAP Servisleri Türkçe Karakter Sorunu





         PHP - SOAP Türkçe Karakter Sorunun Çözümü: 



 PHP - SOAP web servisleri uygulamalarında türkçe karakter desteği hatası alıyorsak sorun HTML, PHP  ve bağlanılan Veritabanı tarafında değil ise sorunu en son SOAP servis tarafında çözmeye bakmak gerekir. Durum şu ki veritabanından gelen datalar SOAP servisten yorumlandığı için PHP tarafında yaptığımız Türkçe karakter ayarları etkisiz kalıyor. Öyle bir durumda aşağıdaki gibi  UTF-8 SOAP servis ayarı yapmak gerekir.   
           
           $servis ->soap_defencoding = 'UTF-8';
           $servis ->soap_defencoding = 'UTF-8';
           $servis ->soap_defencoding = 'UTF-8';
           

28 Şubat 2017 Salı

PHP'de SQL Sorgu Cümlesinde Değişken Tanımlama





   PHP'de SQL Sorguda Tablo ismini veya aranılan kolon ismini bir değişkene bağlamak istediğimizde sorguyu aşağıdaki gibi yazmamız gerekir:
   



         -  SELECT $idfield1 FROM $idfield2 where WIP_ENTITY_NAME='$idfield3'

27 Şubat 2017 Pazartesi

PHP'de Oracle Veritabanına Bağlanma




     PHP ile Oracle Veritabanına Bağlanma Fonksiyonu:



          Fonksiyon, Oracle veritabanına bağlanıp kullanıcıdan aldığı parametreyi SQL sorguda kriter olarak belirleyerek sorgudan dönen değeri sonuç olarak döndürüyor.


   function data_analiz($idfield1) // dışarıdan parametre alan fonksiyon
   {

//Oracle bağlantı string'i
    $conn = "(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = host.domain.adresi)(PORT = 1541))(CONNECT_DATA=(SID=BTCMTEST)))" ;


    if ($conn = OCILogon("user_name", "password", $conn))
    {
       // echo "Oracle veritabanına başarıyla bağlandı...\n";
          $stid = oci_parse($conn, "SELECT STATUS_TYPE FROM                  APPS.XXBTC_SE_WORK_ORDERS_V  where WIP_ENTITY_NAME='$idfield1'");
        oci_execute($stid);


      while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))  !=  false)
      {
          $id=$row['STATUS_TYPE'];
      }
         // OCILogoff($c);
    }
    else
    {
        $err = OCIError();
        echo "Connection failed." . $err[text];
    }
      return $id;

   }

31 Ocak 2017 Salı

Resimleri İkon Hale Getirmek



                              Resimler Nasıl İkon (.ico uzantılı) Hale Getirilir? 



Resimlerin direkt olarak ikon hale getirebilmek için aşağıdaki adrese tıklayarak bu işlemi 2 adımda kolayca yapabilmekteyiz.

http://ico.bradleygill.com/index.php

1- İkon haline getirmek istediğiniz resmi upload edin.

2- ico uzantılı hale gelen resmin üzerine tıklayarak download edin.

19 Ocak 2017 Perşembe

Veritabanı DBLink Oluşturma



                                PostgreSQL'de DBLink Nasıl Oluşturulur?



        DBLink, bir veritabanından başka bir veritabanına erişim sağlamak için veritabanı nesneleri arası kurulan köprü mantığıdır. Bu ilişki aynı sunucu üzerinde iki farklı veritabanı arasında olacağı gibi farklı sunucular üzerine kurulu farklı veritabanları arasında da kurulabilir. Bizim yapacağımız örnekte farklı sunucular üzerine kurulu farklı veritabanları arasındaki dblink özelliği olacaktır. Bunun için A sunucusu üzerine kurulu test1DB ile B sunucusu üzerine kurulu test2DB veritabanları arasında bir dblink oluşturmaya çalışacağız. test1DB sql konsolu üzerine uygulayacağımız adımlar aşağıdaki gibidir:

Oluşturacağım DBLink'in adı: testpostgresconn


DBLink extensions'ın veritbanına yükleme

        CREATE EXTENSION dblink;


- Kurulan DBLink extensions'ın test edilmesi veya barındırdığı özelliklerin listelenmesi

  SELECT pg_namespace.nspname, pg_proc.proname
        FROM pg_proc, pg_namespace
          WHERE pg_proc.pronamespace=pg_namespace.oid
              AND pg_proc.proname LIKE '%dblink%';

-  DBLink üzerinden testDB2 Veritabanına Erişimin Test Edilmesi

SELECT dblink_connect('host=hostadresi user=db_kul_ad password=db_psswrd dbname=testDB2');


-  Global Kullanıcı (Authentication) ve Server Oluşturma

CREATE FOREIGN DATA WRAPPER db_kul_ad VALIDATOR postgresql_fdw_validator;
CREATE SERVER testpostgresconn FOREIGN DATA WRAPPER db_kul_ad OPTIONS (hostaddr 'hostadresi', dbname 'testDB2');


-  Ortak Kullanım için Mapping Oluşturma

CREATE USER MAPPING FOR db_kul_ad SERVER testpostgresconn OPTIONS (user 'db_kul_ad', password 'db_psswrd');


- Oluşturduğumuz DBLink'i Test Etme

SELECT dblink_connect('testpostgresconn');



Şuana kadarki adımları başarılı bir şekilde uyguladığımız taktirde aşağıdaki 'Select' sql sorgu cümleciği ile test1DB üzerinden test2DB veritabanındaki tablolara erişebiliriz. Ve bundan sonra test1DB üzerinden test2DB tablolarına erişim için sorgularımızı yaratmış olduğumuz 'testpostgresconn' adındaki sanal server ortak bağlantısına yazmamız gerekir.


SELECT * FROM public.dblink
('testpostgresconn','SELECT idstruct,nmstruct FROM public.wfstruct')
AS DATA(idstruct CHARACTER VARYING,nmstruct CHARACTER VARYING);