PostgreSQL - Perl Arayüzü

Kurulum

PostgreSQL, Perl programlama dili için bir veritabanı erişim modülü olan Perl DBI modülü kullanılarak Perl ile entegre edilebilir. Standart bir veritabanı arayüzü sağlayan bir dizi yöntemi, değişkeni ve kuralları tanımlar.

Linux / Unix makinenize DBI modülünü kurmanın basit adımları:

$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
$ tar xvfz DBI-1.625.tar.gz
$ cd DBI-1.625
$ perl Makefile.PL
$ make
$ make install

DBI için SQLite sürücüsünü kurmanız gerekiyorsa, aşağıdaki gibi kurulabilir -

$ wget http://search.cpan.org/CPAN/authors/id/T/TU/TURNSTEP/DBD-Pg-2.19.3.tar.gz
$ tar xvfz DBD-Pg-2.19.3.tar.gz
$ cd DBD-Pg-2.19.3
$ perl Makefile.PL
$ make
$ make install

Perl PostgreSQL arayüzünü kullanmaya başlamadan önce, pg_hba.conf PostgreSQL kurulum dizininizdeki dosya ve aşağıdaki satırı ekleyin -

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Çalışmıyorsa, aşağıdaki komutu kullanarak postgres sunucusunu başlatabilir / yeniden başlatabilirsiniz -

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

DBI Arayüz API'leri

Aşağıdakiler, Perl programınızdan SQLite veritabanıyla çalışma gereksiniminizi karşılayabilecek önemli DBI rutinleri. Daha karmaşık bir uygulama arıyorsanız, Perl DBI resmi belgelerine bakabilirsiniz.

S. No. API ve Açıklama
1

DBI→connect($data_source, "userid", "password", \%attr)

İstenen $ data_source'a bir veritabanı bağlantısı veya oturum kurar. Bağlantı başarılı olursa bir veritabanı tutamaç nesnesi döndürür.

Veri kaynağı şu şekle sahiptir: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg, PostgreSQL sürücü adıdır ve testdb, veritabanının adıdır.

2

$dbh→do($sql)

Bu rutin, tek bir SQL deyimi hazırlar ve yürütür. Hata durumunda etkilenen veya tanımlanmamış satır sayısını döndürür. -1 dönüş değeri, satır sayısının bilinmediği, uygulanamadığı veya mevcut olmadığı anlamına gelir. Burada $ dbh, DBI → connect () çağrısı tarafından döndürülen bir tanıtıcıdır.

3

$dbh→prepare($sql)

Bu rutin, veritabanı motoru tarafından daha sonra yürütülmek üzere bir ifade hazırlar ve bir ifade tutamaç nesnesine bir başvuru döndürür.

4

$sth→execute()

Bu rutin, hazırlanan ifadeyi yürütmek için gereken her türlü işlemi gerçekleştirir. Bir hata oluşursa undef döndürülür. Başarılı bir yürütme, etkilenen satır sayısından bağımsız olarak her zaman true değerini döndürür. Burada $ sth, $ dbh → hazırla ($ sql) çağrısı tarafından döndürülen bir deyim tanıtıcısıdır.

5

$sth→fetchrow_array()

Bu rutin, sonraki veri satırını alır ve alan değerlerini içeren bir liste olarak döndürür. Null alanlar, listede undef değerler olarak döndürülür.

6

$DBI::err

Bu, $ h → err'a eşdeğerdir, burada $ h, $ dbh, $ sth veya $ drh gibi tutamaç türlerinden herhangi biridir. Bu, çağrılan son sürücü yönteminden yerel veritabanı motoru hata kodunu döndürür.

7

$DBI::errstr

Bu, $ h → errstr ile eşdeğerdir, burada $ h, $ dbh, $ sth veya $ drh gibi tutamaç türlerinden herhangi biridir. Bu, çağrılan son DBI yönteminden yerel veritabanı motoru hata mesajını döndürür.

8

$dbh->disconnect()

Bu rutin, daha önce DBI → connect () çağrısı ile açılmış olan bir veritabanı bağlantısını kapatır.

Veritabanına Bağlanma

Aşağıdaki Perl kodu, mevcut bir veritabanına nasıl bağlanılacağını gösterir. Veritabanı yoksa, o zaman oluşturulur ve son olarak bir veritabanı nesnesi döndürülür.

#!/usr/bin/perl

use DBI;
use strict;

my $driver  = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) 
   or die $DBI::errstr;

print "Opened database successfully\n";

Şimdi, veritabanımızı açmak için yukarıda verilen programı çalıştıralım. testdb; Veritabanı başarıyla açılırsa aşağıdaki mesajı verir -

Open database successfully

Tablo Oluşturun

Aşağıdaki Perl programı, önceden oluşturulmuş veri tabanında bir tablo oluşturmak için kullanılacaktır -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(CREATE TABLE COMPANY
      (ID INT PRIMARY KEY     NOT NULL,
      NAME           TEXT    NOT NULL,
      AGE            INT     NOT NULL,
      ADDRESS        CHAR(50),
      SALARY         REAL););
my $rv = $dbh->do($stmt);
if($rv < 0) {
   print $DBI::errstr;
} else {
   print "Table created successfully\n";
}
$dbh->disconnect();

Yukarıda verilen program çalıştırıldığında, programınızda ŞİRKET tablosu oluşturacaktır. testdb ve aşağıdaki mesajları gösterecektir -

Opened database successfully
Table created successfully

INSERT İşlemi

Aşağıdaki Perl programı, yukarıdaki örnekte oluşturulan COMPANY tablomuzda nasıl kayıt oluşturabileceğimizi göstermektedir -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;

print "Records created successfully\n";
$dbh->disconnect();

Yukarıda verilen program çalıştırıldığında, ŞİRKET tablosunda verilen kayıtları oluşturacak ve aşağıdaki iki satırı görüntüleyecektir -

Opened database successfully
Records created successfully

SELECT İşlemi

Aşağıdaki Perl programı, yukarıdaki örnekte oluşturulan COMPANY tablomuzdan kayıtları nasıl getirip görüntüleyebileceğimizi gösterir -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY =  ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();

Yukarıda verilen program yürütüldüğünde, aşağıdaki sonucu verecektir -

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  20000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

GÜNCELLEME İşlemi

Aşağıdaki Perl kodu, herhangi bir kaydı güncellemek ve ardından güncellenmiş kayıtları COMPANY tablomuzdan almak ve görüntülemek için UPDATE deyimini nasıl kullanabileceğimizi gösterir -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
}else{
   print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY =  ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();

Yukarıda verilen program yürütüldüğünde, aşağıdaki sonucu verecektir -

Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

DELETE İşlemi

Aşağıdaki Perl kodu, herhangi bir kaydı silmek için DELETE ifadesini nasıl kullanabileceğimizi ve ardından kalan kayıtları COMPANY tablomuzdan alıp görüntüleyebileceğimizi gösterir -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
} else{
   print "Total number of rows deleted : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
   print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n";
      print "SALARY =  ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();

Yukarıda verilen program yürütüldüğünde, aşağıdaki sonucu verecektir -

Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully