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