PostgreSQL - Interfaccia Perl

Installazione

PostgreSQL può essere integrato con Perl utilizzando il modulo Perl DBI, che è un modulo di accesso al database per il linguaggio di programmazione Perl. Definisce un insieme di metodi, variabili e convenzioni che forniscono un'interfaccia database standard.

Ecco alcuni semplici passaggi per installare il modulo DBI sulla tua macchina Linux / 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 è necessario installare il driver SQLite per DBI, è possibile installarlo come segue:

$ 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

Prima di iniziare a utilizzare l'interfaccia PostgreSQL di Perl, trova il file pg_hba.conf file nella directory di installazione di PostgreSQL e aggiungi la seguente riga:

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

È possibile avviare / riavviare il server postgres, nel caso in cui non sia in esecuzione, utilizzando il seguente comando:

[[email protected]]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API dell'interfaccia DBI

Di seguito sono riportate le routine DBI importanti, che possono essere sufficienti per il tuo requisito per lavorare con il database SQLite dal tuo programma Perl. Se stai cercando un'applicazione più sofisticata, puoi consultare la documentazione ufficiale di Perl DBI.

S. No. API e descrizione
1

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

Stabilisce una connessione al database, o sessione, con $ data_source richiesta. Restituisce un oggetto handle di database se la connessione riesce.

L'origine dati ha la forma come: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg è il nome del driver PostgreSQL e testdb è il nome del database.

2

$dbh→do($sql)

Questa routine prepara ed esegue una singola istruzione SQL. Restituisce il numero di righe interessate o undef in caso di errore. Un valore restituito di -1 significa che il numero di righe non è noto, non applicabile o non disponibile. Qui $ dbh è un handle restituito dalla chiamata DBI → connect ().

3

$dbh→prepare($sql)

Questa routine prepara un'istruzione per l'esecuzione successiva dal motore di database e restituisce un riferimento a un oggetto handle dell'istruzione.

4

$sth→execute()

Questa routine esegue qualsiasi elaborazione necessaria per eseguire l'istruzione preparata. Se si verifica un errore, viene restituito un undef. Un'esecuzione riuscita restituisce sempre true indipendentemente dal numero di righe interessate. Qui $ sth è un handle di istruzione restituito dalla chiamata $ dbh → prepare ($ sql).

5

$sth→fetchrow_array()

Questa routine recupera la riga di dati successiva e la restituisce come un elenco contenente i valori del campo. I campi nulli vengono restituiti come valori undef nell'elenco.

6

$DBI::err

Questo è equivalente a $ h → err, dove $ h è uno qualsiasi dei tipi di handle come $ dbh, $ sth o $ drh. Restituisce il codice di errore del motore di database nativo dall'ultimo metodo del driver chiamato.

7

$DBI::errstr

Questo è equivalente a $ h → errstr, dove $ h è uno qualsiasi dei tipi di handle come $ dbh, $ sth o $ drh. Ciò restituisce il messaggio di errore del motore di database nativo dall'ultimo metodo DBI chiamato.

8

$dbh->disconnect()

Questa routine chiude una connessione al database precedentemente aperta da una chiamata a DBI → connect ().

Connessione al database

Il seguente codice Perl mostra come connettersi a un database esistente. Se il database non esiste, verrà creato e infine verrà restituito un oggetto database.

#!/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";

Ora, eseguiamo il programma sopra indicato per aprire il nostro database testdb; se il database viene aperto correttamente, verrà visualizzato il seguente messaggio:

Open database successfully

Crea una tabella

Il seguente programma Perl verrà utilizzato per creare una tabella nel database creato in precedenza:

#!/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();

Quando il programma sopra indicato viene eseguito, creerà la tabella COMPANY nel tuo file testdb e mostrerà i seguenti messaggi -

Opened database successfully
Table created successfully

Operazione INSERT

Il seguente programma Perl mostra come possiamo creare record nella nostra tabella AZIENDA creata nell'esempio precedente:

#!/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();

Quando il programma sopra indicato viene eseguito, creerà dati record nella tabella AZIENDA e visualizzerà le seguenti due righe:

Opened database successfully
Records created successfully

Operazione SELECT

Il seguente programma Perl mostra come possiamo recuperare e visualizzare i record dalla nostra tabella AZIENDA creata nell'esempio precedente:

#!/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();

Quando il programma sopra indicato viene eseguito, produrrà il seguente risultato:

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

Operazione UPDATE

Il seguente codice Perl mostra come possiamo utilizzare l'istruzione UPDATE per aggiornare qualsiasi record e quindi recuperare e visualizzare i record aggiornati dalla nostra tabella 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 "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();

Quando il programma sopra indicato viene eseguito, produrrà il seguente risultato:

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

Operazione DELETE

Il seguente codice Perl mostra come possiamo utilizzare l'istruzione DELETE per eliminare qualsiasi record e quindi recuperare e visualizzare i record rimanenti dalla nostra tabella 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 "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();

Quando il programma sopra indicato viene eseguito, produrrà il seguente risultato:

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