English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PostgreSQL 基础教程

PostgreSQL 高级教程

PostgreSQL 接口

PostgreSQL Perl 接口

安装

PostgreSQL可以使用perldbi模块与Perl集成,perldbi模块是Perl编程语言的数据库访问模块。它定义了一组提供标准数据库接口的方法、变量和约定。

下面是在您的Linux/Unix机器上安装DBI模块的简单步骤

$ 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 安装 SQLite 驱动程序,那么可以按照以下方式安装它

$ 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接口之前,在PostgreSQL安装目录下找到pg_hba.conf文件,添加下面一行

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

إذا لم يكن خادم postgresql يعمل، يمكنك استخدام الأمر التالي لبدء/إعادة تشغيل خادم postgresql-

[root@الخادم]# خدمة postgresql إعادة التشغيل
توقف خدمة postgresql:                               [  حسنًا  ]
بدء خدمة postgresql:                               [  OK  ]

APIات واجهة DBI

هذه بعض العمليات المهمة لـ DBI، التي يمكن أن تفي باحتياجاتك في استخدام قاعدة بيانات SQLite في برنامج Perl. إذا كنت تبحث عن تطبيقات أكثر تعقيدًا، يمكنك الرجوع إلى وثائق Perl DBI الرسمية.

رقم.API & الوصف
1

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

إقامة اتصال أو جلسة إلى قاعدة البيانات المطلوبة $data_source. إذا تم الاتصال بنجاح، يتم إرجاع كائن محول قاعدة البيانات.

تنسيق المصدر هو: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg هو اسم دفعية PostgreSQL، testdb هو اسم قاعدة البيانات.

2

$dbh→do($sql)

هذه العملية إعداد وتنفيذ جملة SQL. يتم إرجاع عدد السطور المتأثرة أو غير المحددة عند حدوث خطأ. يتم إرجاع -1 إذا كان عدد السطور غير معروف أو غير مناسب أو غير متاح. هنا $dbh هو محول الاتصال الذي تم إرجاعه من الاتصال بـ DBI→connect().

3

$dbh→prepare($sql)

إعداد جملة لتنفيذها من قبل محرك قاعدة البيانات في وقت لاحق، وإرجاع مرجع إلى كائن محول الجملة.
4

$sth→execute()

إجراء أي معالجة ضرورية لتنفيذ الجملة المعدة. إذا حدث خطأ، يتم إرجاع undef. يتم إرجاع true دائمًا بنجاح، بغض النظر عن عدد السطور المتأثرة. هنا $sth هو محول الجملة الذي تم إرجاعه من الاتصال بـ $dbh→prepare($sql).

5

$sth→fetchrow_array()

الحصول على السطر التالي من البيانات، وإرجاعه كقائمة تحتوي على قيم الحقول. يتم إرجاع الحقول الفارغة كـ undef في القائمة.

6

$DBI::err

يساوي $h→err، حيث $h هو أي نوع من المفاتيح مثل $dbh، $sth أو $drh. سيقوم هذا بتقديم رمز خطأ لمحرك قاعدة البيانات المحلي من الأسلوب الأخير المطلوب من الدفعية.

7

$DBI::errstr

يساوي $h→errstr، حيث $h هو أي نوع من المفاتيح مثل $dbh، $sth أو $drh. سيقوم هذا بتقديم رسالة خطأ لمحرك قاعدة البيانات المحلي من الأسلوب الأخير المطلوب من DBI.

8

$dbh->disconnect()

إغلاق الاتصال بالقاعدة البيانات الذي تم فتحه سابقًا عن طريق الاتصال بـ DBI→connect().

connect database

下面的Perl代码展示了如何连接到现有数据库。如果数据库不存在,那么将创建它,最后将返回一个数据库对象。

#!/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 "تم فتح قاعدة البيانات بنجاح\n";

现在,让我们运行上面给定的程序来打开数据库testdb;如果数据库成功打开,那么它将给出以下消息-

Open database successfully

创建表

下面的Perl程序将用于在先前创建的数据库中创建表

#!/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 "تم فتح قاعدة البيانات بنجاح\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();

当执行上面给定的程序时,它将在 testdb 中创建 COMPANY 表,并显示以下消息-

تم فتح قاعدة البيانات بنجاح
Table created successfully

INSERT 操作

下面的Perl程序显示了如何在上面示例中创建的COMPANY表中创建记录-

#!/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 "تم فتح قاعدة البيانات بنجاح\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();

当上述程序执行时,将在COMPANY表中创建给定的记录,并显示以下两行

تم فتح قاعدة البيانات بنجاح
Records created successfully

SELECT 操作

下面的Perl程序显示了如何从上面示例中创建的COMPANY表中获取和显示记录-

#!/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 "تم فتح قاعدة البيانات بنجاح\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 "الرقم التسلسلي = " . $row[0] . "\n";
      print "الاسم = " . $row[1] . "\n";
      print "العنوان = " . $row[2] . "\n";
      print "الراتب =  " . $row[3] . "\n\n";
}
print "إجراء العمل تم بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتيجة التالية

تم فتح قاعدة البيانات بنجاح
الرقم التسلسلي = 1
الاسم = Paul
العنوان = كاليفورنيا
الراتب = 20000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000
الرقم التسلسلي = 3
الاسم = Teddy
العنوان = النرويج
الراتب = 20000
الرقم التسلسلي = 4
الاسم = Mark
العنوان = Rich-Mond
الراتب = 65000
إجراء العمل تم بنجاح

UPDATE 操作

下面的Perl代码展示了如何使用UPDATE语句更新任何记录,然后从我们的COMPANY表中获取并显示更新后的记录:

#!/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 "تم فتح قاعدة البيانات بنجاح\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 "الرقم التسلسلي = " . $row[0] . "\n";
      print "الاسم = " . $row[1] . "\n";
      print "العنوان = " . $row[2] . "\n";
      print "الراتب =  " . $row[3] . "\n\n";
}
print "إجراء العمل تم بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتيجة التالية

تم فتح قاعدة البيانات بنجاح
Total number of rows updated: 1
الرقم التسلسلي = 1
الاسم = Paul
العنوان = كاليفورنيا
الراتب = 25000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000
الرقم التسلسلي = 3
الاسم = Teddy
العنوان = النرويج
الراتب = 20000
الرقم التسلسلي = 4
الاسم = Mark
العنوان = Rich-Mond
الراتب = 65000
إجراء العمل تم بنجاح

DELETE 操作

下面的 Perl 代码展示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录

#!/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 "تم فتح قاعدة البيانات بنجاح\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 "عدد الصفوف المزالة الإجمالي: $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 "الرقم التسلسلي = " . $row[0] . "\n";
      print "الاسم = " . $row[1] . "\n";
      print "العنوان = " . $row[2] . "\n";
      print "الراتب =  " . $row[3] . "\n\n";
}
print "إجراء العمل تم بنجاح\n";
$dbh->disconnect();

عندما يتم تنفيذ البرنامج المذكور أعلاه، سيتم إنتاج النتيجة التالية

تم فتح قاعدة البيانات بنجاح
عدد الصفوف المزالة الإجمالي: 1
الرقم التسلسلي = 1
الاسم = Paul
العنوان = كاليفورنيا
الراتب = 25000
الرقم التسلسلي = 3
الاسم = Teddy
العنوان = النرويج
الراتب = 20000
الرقم التسلسلي = 4
الاسم = Mark
العنوان = Rich-Mond
الراتب = 65000
إجراء العمل تم بنجاح