TUTORIELS 
PHP et les "autres" bases de données (1) : PostgreSQL

Page 1 | 2

Parce qu'il n'y a pas que PHP/MySQL, le JDNetDev commence ici une série d'articles dédiés à ces SGBD alternatifs qui ne déméritent pas face au champion MySQL.
 (25 septembre 2003)
 

Bien que PHP soit réputé pour sa capacité à gérer un grand nombre de systèmes de bases de données, on mentionne rarement d'autres SGBD que MySQL. Nous allons, au fil de cette série d'articles, aborder ces "autres" bases de données, celles qui sont moins évidentes que le couple PHP/MySQL, et qui pourtant n'en sont pas moins intéressantes... voire supérieures.
Nous commençons notre série avec PostgreSQL, le SGBD libre le plus connu après MySQL.

Présentation
PostgreSQL (abrégé en PgSQL) a vu le jour en 1986 à l'université de Berkeley (Californie), où son ancêtre, Ingres, a aussi été conçu.
PgSQL, bien qu'apparemment moins utilisée que MySQL, présente pourtant de nombreux avantages par rapport à son "concurrent" : sous-requêtes, requêtes ensemblistes, gestion des transactions, vues, procédures stockées (fonctions), déclencheurs (triggers), gestion de l'intégrité référentielle... L'avantage sur la vitesse qu'avait MySQL par rapport à PgSQL n'a aujourd'hui plus lieu d'être : la version 7.3 du SGBD est très aboutie, et il est temps que les développeurs voulant faire autre chose que "bricoler" une base de données s'y intéressent. PgSQL est robuste et possède beaucoup d'atouts.

Quelques détails
Notez que MySQL dispose d'un avantage sur PgSQL (et d'autres SGBD) : l'attribut auto_increment, qui n'existe simplement pas dans PgSQL. Cette dernière dispose du type de donnée SERIAL, qui crée une séquence et un index sur la colonne choisie.
PgSQL est largement plus respectueux de la norme SQL que MySQL : il est donc recommandé de s'y plonger pour ne pas être pris de court face à certaines réactions du SGBD si on lui donne des instructions MySQL propriétaires.
Il nous faut parler des "large objects", une spécificité de PgSQL : introduits récemment, ces "gros objets" permettent de faire passer la limite de taille d'une ligne de 8 Ko à 1 Go. PHP dispose à cette fin d'un ensemble de fonctions dédiées à la manipulation de ces objets : pg_lo_create(), pg_lo_read(), pg_lo_write()...
PgSQL supporte les transactions SQL, c'est-à-dire la possibilité de grouper plusieurs requêtes SQL ensemble. On peut ainsi lancer toute une série de modifications sur la base, selon qu'un test ait réussi ou non :

$req = "BEGIN WORK";
$resultat = pg_query($db, $req);
$req = "INSERT INTO eleves VALUES (NEXTVAL('eleves_id_seq'), 'Cancre', '0', '2')";
$resultat = pg_query($db, $req);
$req = "INSERT INTO eleves VALUES (NEXTVAL('eleves_id_seq'), 'Genie', '19', '20')";
$resultat = pg_query($db, $req);
$req = "INSERT INTO eleves VALUES (NEXTVAL('eleves_id_seq'), 'Normal', '9', '15')";
$resultat = pg_query($db, $req);
$query = "COMMIT";
$resultat = pg_query($db, $req);

Par ailleurs, PgSQL accepte les sous-requêtes, qui viennent seulement de faire leur apparition dans MySQL 4.x :

SELECT nom
  FROM eleves
  WHERE plusmauvaisenote = (
    SELECT max(plusmauvaisenote)
      FROM eleves);

SELECT titre
  FROM article
  WHERE auteur_id = (
    SELECT id
      FROM auteurs
      WHERE last_name='Borderie'
      AND first_name='Xavier');

Ajoutons aussi l'existence des vues (views), qui permettent de stocker des requêtes et de les appeler comme n'importe quelle fonction :

CREATE VIEW liste_auteurs_dev
  AS SELECT nom,prenom,type_contrat,date_arrivee
    FROM auteurs
    WHERE redaction = "jdnetdev"
    ORDER BY date_arrivee ASC;

SELECT * FROM list_auteurs_dev
  ORDER BY nom,prenom;


Combinez tout cela, et vous obtenez une petite révolution pour les accros à MySQL! PgSQL offre d'autres surprises, que nous vous invitons à découvrir.

Page 1 | 2

 
[ Xavier Borderie JDNet
 
Accueil | Haut de page