Situer PostgreSQL et MySQL
Une requête fonctionne dans PostgreSQL et échoue dans une ancienne version de MySQL. Avant de la réécrire, identifie le moteur et sa version : le nom SQL ne garantit pas que toutes les fonctions arrivent au même moment. Cette fiche est de la culture technique ; elle n'est pas évaluée.
1970 : le modèle relationnel
En 1970, Edgar Codd, chercheur chez IBM, publie un article qui propose de stocker les données dans des tables et de les manipuler avec des opérations mathématiques, l'algèbre relationnelle. Jusque-là, un programme parcourait à la main une structure de pointeurs pour retrouver une donnée. L'idée est simple à énoncer et lourde à mettre en œuvre.
Deux équipes la prennent au sérieux en même temps, dans deux endroits différents :
- IBM, à San Jose, construit System R. Cette équipe invente le langage SQL, d'abord appelé SEQUEL.
- Berkeley, avec Michael Stonebraker et Eugene Wong, construit Ingres, un système concurrent qui n'utilise pas SQL au départ.
Les deux montrent que le modèle relationnel marche à grande échelle. IBM en tire DB2. Stonebraker continue.
De Ingres à PostgreSQL
En 1986, Stonebraker lance à Berkeley un nouveau projet, POSTGRES, pour « post-Ingres ». Le modèle relationnel pur a des limites : types de données figés, pas d'héritage entre tables, peu d'extensibilité. POSTGRES veut les dépasser. Le projet a d'abord son propre langage de requête, sans SQL.
En 1994, deux étudiants, Andrew Yu et Jolly Chen, ajoutent un interpréteur SQL. En 1996, le projet est renommé PostgreSQL. La documentation officielle retrace POSTGRES, Postgres95 et ce changement de nom. Cet héritage se voit encore : PostgreSQL suit le standard SQL de près et reste extensible, avec des types personnalisés, des extensions et des fonctions écrites dans plusieurs langages.
MySQL : la vitesse d'abord
La première version de MySQL paraît en mai 1995. Son historique officiel explique que ses auteurs cherchaient une interface SQL adaptée à leurs routines de stockage. Le nom vient de My, la fille de Michael Widenius.
Sun Microsystems rachète MySQL AB en 2008. Oracle annonce l'accord en 2009 et finalise l'acquisition le 26 janvier 2010. Widenius ne veut pas voir MySQL entre les mains d'un concurrent direct. Il crée un fork, une copie du projet qui évolue ensuite séparément : MariaDB, du prénom de sa seconde fille, Maria.
Vérifier au lieu de supposer
Les window functionsUne fonction qui calcule un agrégat en gardant toutes les lignes du résultat, au lieu de les écraser comme le fait un GROUP BY. de la partie 2 et de la partie 3 (OVER(),
PARTITION BY) font partie du standard SQL depuis 2003 (SQL:2003). PostgreSQL
les implémente dans sa version 8.4, en 2009. MySQL les a eues en 2018, avec la
version 8.0. Ce décalage montre pourquoi la version doit être vérifiée ; ces
dates seules ne permettent pas d'en attribuer la cause aux intentions des
équipes.
Exécute cette instruction dans ton environnement :
SELECT version();Avant de l'exécuter, prédis les deux informations utiles. Tu dois retrouver le moteur et sa version. Cherche ensuite une fonction de l'une de tes requêtes dans la documentation de cette version.
Transférer le contrôle
Choisis une requête qui utilise une fonction autre que COUNT, SUM ou AVG.
Produis une note avec le moteur et la version de départ, la page officielle
consultée, le moteur et la version d'arrivée, puis le test à lancer. Une autre
personne doit pouvoir décider si la requête est portable sans te demander ce
que tu as lu.