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
|