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

Tutoriais básicos PostgreSQL

Tutoriais avançados PostgreSQL

Interface PostgreSQL

Interface PostgreSQL Perl

Instalação

O PostgreSQL pode ser integrado com o Perl usando o módulo perldbi, que é um módulo de acesso a banco de dados do Perl. Ele define um conjunto de métodos, variáveis e convenções que fornecem uma interface padrão para o banco de dados.

A seguir está no seu Linux/Passos simples para instalar o módulo DBI em máquinas Unix

$ 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

Se você precisar instalar o driver SQLite para DBI, pode seguir a seguinte instalação

$ 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

Antes de começar a usar o interface Perl PostgreSQL, localize o arquivo pg_hba.conf na pasta de instalação do PostgreSQL e adicione a linha a seguir.

# IPv4 Conexões locais:
host    all         all         127.0.0.1/32          md5

Se o servidor postgres não estiver em execução, você pode usar o seguinte comando para iniciá-lo/Reiniciando o servidor postgres-

[root@host]# service postgresql restart
Parando o serviço postgresql:                               [  OK  ]
Iniciando o serviço postgresql:                               [  OK  ]

APIs do Interface DBI

A seguir estão algumas rotinas importantes do DBI, que podem atender às suas necessidades ao usar o banco de dados SQLite em programas Perl. Se você está buscando aplicações mais complexas, você pode consultar a documentação oficial do Perl DBI.

N.ºAPI & Descrição
1

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

Estabelece uma conexão ou sessão com o banco de dados solicitado $data_source. Se a conexão for bem-sucedida, retorna um objeto manipulador de banco de dados.

O formato do Datasource é: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg é o nome do driver do PostgreSQL, testdb é o nome do banco de dados.

2

$dbh→do($sql)

Esta rotina prepara e executa uma declaração SQL. Ao retornar, indica o número de linhas afetadas ou não definidas. O valor de retorno-1Representa o número de linhas desconhecido, inaplicável ou indisponível. Aqui, $dbh é o manipulador retornado pela chamada DBI → connect().

3

$dbh→prepare($sql)

Prepara uma declaração para execução posterior pelo motor de banco de dados e retorna uma referência para o objeto manipulador de declaração.
4

$sth→execute()

Executa qualquer tratamento necessário para executar a declaração preparada. Se ocorrer um erro, retorna 'undef'. Sempre retorna 'true' após uma execução bem-sucedida, independentemente do número de linhas afetadas. Aqui, $sth é um manipulador de declaração retornado pela chamada $dbh→prepare($sql).

5

$sth→fetchrow_array()

Obtém a próxima linha de dados e a retorna como uma lista que contém valores de campos. Os campos em branco são retornados como valor 'undef' na lista.

6

$DBI::err

相当于$h->err,其中$h是任何句柄类型,如$dbh、$sth或$drh。这将从上次调用的驱动程序方法返回本机数据库引擎错误代码。

7

$DBI::errstr

相当于$h->errstr,其中$h是任何句柄类型,如$dbh、$sth或$drh。这将从上次调用的DBI方法返回本机数据库引擎错误消息。

8

$dbh->disconnect()

关闭了之前通过调用DBI→connect()打开的数据库连接。

连接数据库

下面的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 })}} 
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\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 })}}
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\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->desconectar();

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

Banco de dados aberto com sucesso
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 })}}
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) ou morrer $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) ou morrer $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (3, 'Teddy', 23, 'Norway',}} 20000.00 ));
$rv = $dbh->do($stmt) ou morrer $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ));
$rv = $dbh->do($stmt) ou morrer $DBI::errstr;
print "Registros criados com sucesso\n";
$dbh->desconectar();

Quando o programa acima for executado, ele criará os registros fornecidos na tabela COMPANY e exibirá as seguintes duas linhas

Banco de dados aberto com sucesso
Registros criados com sucesso

Operação SELECT

O programa Perl a seguir mostra como obter e exibir os registros do banco de dados COMPANY criado no exemplo anterior-

#!/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 })}}
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\n";
my $stmt = qq(SELECT id, name, address, salary FROM COMPANY;);
my $sth = $dbh->preparar( $stmt );
my $rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n";
$dbh->desconectar();

Quando o programa acima for executado, será gerado o seguinte resultado

Banco de dados aberto com sucesso
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
Operação concluída com sucesso

Operação UPDATE

O código Perl a seguir mostra como usar a cláusula UPDATE para atualizar qualquer registro, então do nosso banco de dados COMPANY e exibir os registros atualizados:

#!/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 })}}
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) ou morrer $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
} else {
   print "Número total de linhas atualizadas: $rv\n";
}
$stmt = qq(SELECT id, name, address, salary FROM COMPANY;);
my $sth = $dbh->preparar( $stmt );
$rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n";
$dbh->desconectar();

Quando o programa acima for executado, será gerado o seguinte resultado

Banco de dados aberto com sucesso
Número total de linhas atualizadas: 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
Operação concluída com sucesso

Operação DELETE

O código Perl a seguir mostra como usar a cláusula DELETE para excluir qualquer registro, então do banco de dados COMPANY-obter e exibir os registros restantes

#!/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 })}}
   ou morrer $DBI::errstr;
print "Banco de dados aberto com sucesso\n";
my $stmt = qq(DELETE FROM COMPANY WHERE ID=;2;);
my $rv = $dbh->do($stmt) ou morrer $DBI::errstr;
if( $rv < 0 ) {
   print $DBI::errstr;
} else {
   print "Número total de linhas deletadas: $rv\n";
}
$stmt = qq(SELECT id, name, address, salary FROM COMPANY;);
my $sth = $dbh->preparar( $stmt );
$rv = $sth->execute() ou morrer $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 "Operação concluída com sucesso\n";
$dbh->desconectar();

Quando o programa acima for executado, será gerado o seguinte resultado

Banco de dados aberto com sucesso
Número total de linhas deletadas: 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
Operação concluída com sucesso