On me demande souvent la liste des différences existantes entre PostgreSQL et MySQL. Je vais donc tenter de faire une liste des fonctionnalités existantes dans PostgreSQL, et pas dans MySQL :

  • L'opérateur ||, pour la concaténation de chaines de caractères, qui fait parti du standard SQL.
  • Un type de données booléen.
  • Les contraintes de vérifications sur les colonnes, et sur une table, avec le mot-clé CHECK.
  • Les clés étrangères ne sont présentes qu'avec le moteur de stockage InnoDb.
  • Le fait de pouvoir différer les vérifications des clés étrangères.
  • Les déclencheurs sur les ordres (For each statement), et non pas seulement sur les tuples (For each row).
  • Les ordres DDL compatibles ACID.
  • Les domaines : types de données avec des contraintes.
  • Les aggrégats définis par l'utilisateur.
  • Le choix du langage de procédures stockées : Java, Php, Python, Perl, C, Ruby, Sh, ...
  • Les règles de réecritures des requêtes.
  • Un auto-incrément mutualisé entre plusieurs tables.
  • Des opérateurs et transtypages définis par l'utilisateur.
  • La notion d'espace de noms (schémas). Cette notion est confondue avec celle de base de données dans MySQL, alors qu'elle est bien distincte dans le cas de PostgreSQL.
  • Les espaces de données (tablespace).
  • L'héritage de tables.
  • Les types d'index définis pas l'utilisateur.

Cette liste est dans le désordre, et certainement pas finie...