Cette section explique dans quelle mesure PostgreSQL™ se conforme à la norme SQL en vigueur. Les informations qui suivent ne représentent pas une liste exhaustive de conformance, mais présentent les thèmes principaux utilement et raisonnablement détaillés.
Le nom complet du standard SQL est ISO/IEC 9075 « Database Language SQL ». Le standard est modifié de temps en temps. La plus récente révision est datée de fin 2003. Cette version porte la référence ISO/IEC 9075:2003, aussi abrégée SQL:2003. Les versions précédentes sont SQL:1999 et SQL-92. Chaque version remplace la précédente. Il n'y a donc aucun mérite à revendiquer une compatibilité avec une version antérieure du standard.
Le développement de PostgreSQL™ respecte le standard en vigueur, tant que celui-ci ne s'oppose pas aux fonctionnalités traditionnelles ou au bon sens. Le projet PostgreSQL n'était pas représenté au sein du groupe de travail ISO/IEC 9075 lors de la préparation de SQL:2003. Malgré cela, un grand nombre des fonctionnalités requises par SQL:2003 sont déjà supportées. Parfois avec une syntaxe ou un fonctionnement légèrement différents. Une meilleure comformance est attendue pour les prochaines versions.
SQL-92 définit trois niveaux de conformité : basique ( Entry ), intermédiaire ( Intermediate ) et complète ( Full ). La majorité des systèmes de gestion de bases de données se prétendaient compatibles au standard SQL dès lors qu'ils se conformaient au niveau Entry ; l'ensemble des fonctionnalités des niveaux Intermediate et Full étaient, soit trop volumineux, soit en conflit avec les fonctionnalités implantées.
À partir de SQL99, le standard SQL définit un vaste ensemble de fonctionnalités individuelles à la place des trois niveaux de fonctionnalités définis dans SQL-92. Une grande partie représente les fonctionnalités « centrales » que chaque implantation conforme de SQL doit fournir. Les fonctionnalités restantes sont purement optionnelles. Certaines sont regroupées au sein de « paquetages » auxquels une implantation peut se déclarer conforme. On parle alors de conformité à un groupe de fonctionnalités.
Le standard SQL:2003 est également divisé en parties. Chacune est connue par un pseudonyme. Leur numérotation n'est pas consécutive :
ISO/IEC 9075-1 Framework (SQL/Framework) ;
ISO/IEC 9075-2 Foundation (SQL/Foundation) ;
ISO/IEC 9075-3 Call Level Interface (SQL/CLI) ;
ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9 Management of External Data (SQL/MED) ;
ISO/IEC 9075-10 Object Language Bindings (SQL/OLB) ;
ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata) ;
ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT) ;
ISO/IEC 9075-14 XML-related specifications (SQL/XML).
PostgreSQL™ couvre les parties 1, 2 et 11. La partie 3 est similaire à l'interface ODBC et la partie 4 au langage de programmation PL/pgSQL. Une conformité exacte n'est pas spécifiquement voulue ou vérifiée pour ces parties.
PostgreSQL supporte la plupart des fonctionnalités majeures de SQL:2003. Sur les 164 fonctionnalités requises pour une conformité « centrale » complète ( full Core conformance ), PostgreSQL se conforme à plus de 150. De plus, il existe une longue liste de fonctionnalités optionelles supportées. à la date de rédaction de ce document, aucune version de quelque système de gestion de bases de données que ce soit n'affiche une totale conformité à SQL:2003 « centrale ».
Les deux sections qui suivent présentent la liste des fonctionnalités supportées par PostgreSQL™ et celle des fonctionnalités définies dans SQL:2003 qui ne sont pas encore prises en compte. Ces deux listes sont approximatives : certains détails d'une fonctionnalité présentée comme supportée peuvent ne pas être conformes, alors que de grandes parties d'une fonctionnalité non supportée peuvent être implantées. La documentation principale fournit les informations précises sur ce qui est, ou non, supporté.
Les codes de fonctionnalité contenant un tiret sont des sous-fonctionnalités. Si une sous-fonctionnalité n'est pas supportée, la fonctionnalité elle-même sera déclarée non supportée, alors même que d'autres de ses sous-fonctionnalités le sont.
Identifiant | Paquetage | Description | Commentaire |
---|---|---|---|
B012 | C embarqué | ||
B021 | SQL direct | ||
E011 | Coeur | Types de données numériques | |
E011-01 | Coeur | Types de données INTEGER et SMALLINT | |
E011-02 | Coeur | Types de données REAL, DOUBLE PRECISON et FLOAT | |
E011-03 | Coeur | Types de données DECIMAL et NUMERIC | |
E011-04 | Coeur | Opérateurs arithmétiques | |
E011-05 | Coeur | Comparaison numérique | |
E011-06 | Coeur | Transtypage implicite entre types de données numériques | |
E021 | Coeur | Character data types | |
E021-01 | Coeur | CHARACTER data type | |
E021-02 | Coeur | Type de données CHARACTER VARYING | |
E021-03 | Coeur | Libellés | |
E021-04 | Coeur | Fonction CHARACTER_LENGTH | |
E021-05 | Coeur | Fonction OCTET_LENGTH | |
E021-06 | Coeur | Fonction SUBSTRING | |
E021-07 | Coeur | Concaténation de caractères | |
E021-08 | Coeur | Fonctions UPPER et LOWER | |
E021-09 | Coeur | Fonction TRIM | |
E021-10 | Coeur | Transtypage implicite entre types de données caractères | |
E021-11 | Coeur | Fonction POSITION | |
E021-12 | Coeur | Comparaison de caractères | |
E031 | Coeur | Identifiants | |
E031-01 | Coeur | Identifiants délimités | |
E031-02 | Coeur | Identifiants minuscules | |
E031-03 | Coeur | Tirets bas de fin ( Trailing underscore | |
E051 | Coeur | Spécification de requête basique | |
E051-01 | Coeur | SELECT DISTINCT | |
E051-02 | Coeur | Clause GROUP BY | |
E051-04 | Coeur | GROUP BY peut contenir des colonnes en dehors de la <select list> | |
E051-05 | Coeur | Les éléments de la <select list> peuvent être renommés | AS est obligatoire |
E051-06 | Coeur | Clause HAVING | |
E051-07 | Coeur | * qualifié dans la <select list> | |
E051-08 | Coeur | Noms de corrélation dans la clause FROM | |
E051-09 | Coeur | Renommer les colonnes de la clause FROM | |
E061 | Coeur | Prédicats et conditions de recherche de base | |
E061-01 | Coeur | Prédicat de comparaison | |
E061-02 | Coeur | Prédicat BETWEEN | |
E061-03 | Coeur | Prédicat IN avec une liste de valeurs | |
E061-04 | Coeur | Prédicat LIKE | |
E061-05 | Coeur | Prédicat LIKE clause ESCAPE | |
E061-06 | Coeur | Prédicat NULL | |
E061-07 | Coeur | Prédicat de comparaison qunatifiée | |
E061-08 | Coeur | Prédicat EXISTS | |
E061-09 | Coeur | Sous-requêtes dans un prédicat de comparaison | |
E061-11 | Coeur | Sous-requêtes dans un prédicat IN | |
E061-12 | Coeur | Sous-requêtes dans un prédicat de comparaison qunatifiée | |
E061-13 | Coeur | Sous-requêtes corrélées | |
E061-14 | Coeur | Condition de recherche | |
E071 | Coeur | Expressions de requête basiques | |
E071-01 | Coeur | Opérateur de table UNION DISTINCT | |
E071-02 | Coeur | Opérateur de table UNION ALL | |
E071-03 | Coeur | Opérateur de table EXCEPT DISTINCT | |
E071-05 | Coeur | Les colonnes combinées par des opérateurs de table doivent avoir exactement le même type de données | |
E071-06 | Coeur | Opérateurs de table dans les sous-requêtes | |
E081-01 | Coeur | Privilège SELECT | |
E081-02 | Coeur | Privilège DELETE | |
E081-03 | Coeur | Privilège INSERT de niveau table | |
E081-04 | Coeur | Privilège UPDATE de niveau table | |
E081-06 | Coeur | Privilège REFERENCES de niveau table | |
E081-08 | Coeur | WITH GRANT OPTION | |
E081-10 | Coeur | Privilège EXECUTE | |
E091 | Coeur | Fonctions ensemblistes ( Set functions ) | |
E091-01 | Coeur | AVG | |
E091-02 | Coeur | COUNT | |
E091-03 | Coeur | MAX | |
E091-04 | Coeur | MIN | |
E091-05 | Coeur | SUM | |
E091-06 | Coeur | Quantificateur ALL | |
E091-07 | Coeur | Quantificateur DISTINCT | |
E101 | Coeur | Manipulation de données basique | |
E101-01 | Coeur | Instruction INSERT | |
E101-03 | Coeur | Instruction UPDATE sur recherche | |
E101-04 | Coeur | Instruction DELETE sur recherche | |
E111 | Coeur | Instruction SELECT sur ligne unique | |
E121-01 | Coeur | DECLARE CURSOR | |
E121-02 | Coeur | Les colonnes de l'ORDER BY n'ont pas besoin d'être dans la <select list> | |
E121-03 | Coeur | Expressions valuées dans une clause ORDER BY | |
E121-04 | Coeur | Instruction OPEN | |
E121-08 | Coeur | Instruction CLOSE | |
E121-10 | Coeur | Instruction FETCH à NEXT implicite | |
E121-17 | Coeur | Curseurs WITH HOLD | |
E131 | Coeur | Support des valeurs nulles (NULL comme valeur) | |
E141 | Coeur | Contraintes d'intégrité basiques | |
E141-01 | Coeur | Contraintes NOT NULL | |
E141-02 | Coeur | Contraintes UNIQUE des colonnes NOT NULL | |
E141-03 | Coeur | Contraintes PRIMARY KEY | |
E141-04 | Coeur | Contrainte FOREIGN KEY de base avec NO ACTION par défaut pour la suppression référentielle et l'actualisation référentielle | |
E141-06 | Coeur | Contraintes CHECK | |
E141-07 | Coeur | Valeur par défaut de la colonne | |
E141-08 | Coeur | NOT NULL inféré sur PRIMARY KEY | |
E141-10 | Coeur | L'ordre des noms au sein d'une clé étrangère n'a aucune importance | |
E151 | Coeur | Support des transactions | |
E151-01 | Coeur | Instruction COMMIT | |
E151-02 | Coeur | Instruction ROLLBACK | |
E152 | Coeur | Instruction SET TRANSACTION basique | |
E152-01 | Coeur | Instruction SET TRANSACTION : clause ISOLATION LEVEL SERIALIZABLE | |
E152-02 | Coeur | Instruction SET TRANSACTION : clauses READ ONLY et READ WRITE | |
E161 | Coeur | Commentaires SQL définis avec deux tirets hauts en début de chaîne | |
E171 | Coeur | Support de SQLSTATE | |
F021 | Coeur | Schéma d'information basique | |
F021-01 | Coeur | Vue COLUMNS | |
F021-02 | Coeur | Vue TABLES | |
F021-03 | Coeur | Vue VIEWS | |
F021-04 | Coeur | Vue TABLE_CONSTRAINTS | |
F021-05 | Coeur | Vue REFERENTIAL_CONSTRAINTS | |
F021-06 | Coeur | Vue CHECK_CONSTRAINTS | |
F031 | Coeur | Manipulation basique de schéma | |
F031-01 | Coeur | Instruction CREATE TABLE de création de tables de base persistentes | |
F031-02 | Coeur | Instruction CREATE VIEW | |
F031-03 | Coeur | Instruction GRANT | |
F031-04 | Coeur | Instruction ALTER TABLE ;: clause ADD COLUMN | |
F031-13 | Coeur | Instruction DROP TABLE : clause RESTRICT | |
F031-16 | Coeur | Instruction DROP VIEW : clause RESTRICT | |
F031-19 | Coeur | Instruction REVOKE : clause RESTRICT | |
F032 | Comportement de la suppression en CASCADE | ||
F033 | Instruction ALTER TABLE : clause DROP COLUMN | ||
F034 | Instruction REVOKE étendue | ||
F034-01 | Instruction REVOKE exécutée par quelqu'un qui n'est pas propriétaire d'un objet du schéma | ||
F034-02 | Instruction REVOKE : clause GRANT OPTION FOR | ||
F034-03 | Instruction REVOKE pour supprimer un privilège hérité avec WITH GRANT OPTION | ||
F041 | Coeur | Table jointe basique | |
F041-01 | Coeur | Jointure interne (mais pas nécessairement le mot-clé INNER) | |
F041-02 | Coeur | Mot-clé INNER | |
F041-03 | Coeur | LEFT OUTER JOIN | |
F041-04 | Coeur | RIGHT OUTER JOIN | |
F041-05 | Coeur | Les jointures externes peuvent être imbriquées | |
F041-07 | Coeur | La table interne d'une jointure externe droite ou gauche peut aussi être utilisée dans une jointure interne | |
F041-08 | Coeur | Tous les opérateurs de comparaison sont supportés (plutôt que juste =) | |
F051 | Coeur | Date et heure basiques | |
F051-01 | Coeur | Type de données DATE (incluant le support des libellés DATE) | |
F051-02 | Coeur | Type de données TIME (incluant le support des libellés TIME) avec une précision des secondes fractionnelles d'au moins 0 | |
F051-03 | Coeur | Type de données TIMESTAMP (incluant le support des libellés TIMESTAMP) avec une précision des secondes fractionnelles d'au moins 0 et 6 | |
F051-04 | Coeur | Prédicat de comparaison des types de données DATE, TIME et TIMESTAMP | |
F051-05 | Coeur | CAST explicite entre types date-heure et types caractère | |
F051-06 | Coeur | CURRENT_DATE | |
F051-07 | Coeur | LOCALTIME | |
F051-08 | Coeur | LOCALTIMESTAMP | |
F052 | Fonctionnalités date-heure évoluées | Arithmétique des intervalles et date-heure | |
F053 | Prédicat OVERLAPS | ||
F081 | Coeur | UNION et EXCEPT dans les vues | |
F111 | Niveaux d'isolation différents de SERIALIZABLE | ||
F111-01 | Niveau d'isolation READ UNCOMMITTED | ||
F111-02 | Niveau d'isolation READ COMMITTED | ||
F111-03 | Niveau d'isolation REPEATABLE READ | ||
F131 | Coeur | Opérations groupées | |
F131-01 | Coeur | Clauses WHERE, GROUP BY et HAVING supportées dans les requêtes avec vues groupées | |
F131-02 | Coeur | Tables multiples supportées dans les requêtes avec vues groupées | |
F131-03 | Coeur | Fonctions ensemblistes supportées dans les requêtes avec vues groupées | |
F131-04 | Coeur | Sous-requêtes avec clauses GROUP BY et HAVING et vues groupées | |
F131-05 | Coeur | SELECT de ligne unique avec clauses GROUP BY et HAVING et vues groupées | |
F171 | Multiples schémas par utilisateur | ||
F191 | Gestion évoluée de l'intégrité | Suppressions référentielles | |
F201 | Coeur | Fonction CAST | |
F221 | Coeur | Valeurs par défaut explicites | |
F222 | Instruction INSERT : clause DEFAULT VALUES | ||
F231 | Table des privilèges | ||
F231-01 | Vue TABLE_PRIVILEGES | ||
F231-02 | Vue COLUMN_PRIVILEGES | ||
F231-03 | Vue USAGE_PRIVILEGES | ||
F251 | Support des domaines | ||
F261 | Coeur | Expression CASE | |
F261-01 | Coeur | CASE simple | |
F261-02 | Coeur | CASE recherché | |
F261-03 | Coeur | NULLIF | |
F261-04 | Coeur | COALESCE | |
F271 | Libellés de caractère composé | ||
F281 | Améliorations du LIKE | ||
F302 | Opérateur de table INTERSECT | ||
F302-01 | Opérateur de table INTERSECT DISTINCT | ||
F302-02 | Opérateur de table INTERSECT ALL | ||
F304 | Opérateur de table EXCEPT ALL | ||
F311-01 | Coeur | CREATE SCHEMA | |
F311-02 | Coeur | CREATE TABLE pour tables de base persistentes | |
F311-03 | Coeur | CREATE VIEW | |
F311-05 | Coeur | Instruction GRANT | |
F321 | Autorisation utilisateur | ||
F361 | Support de sous-programme | ||
F381 | Manipulation de schéma étendue | ||
F381-01 | Instruction ALTER TABLE : clause ALTER COLUMN | ||
F381-02 | Instruction ALTER TABLE : clause ADD CONSTRAINT | ||
F381-03 | Instruction ALTER TABLE : clause DROP CONSTRAINT | ||
F391 | Identificateurs longs | ||
F401 | Table jointe étendue | ||
F401-01 | NATURAL JOIN | ||
F401-02 | FULL OUTER JOIN | ||
F401-04 | CROSS JOIN | ||
F411 | Fonctionnalités date-heure étendues | Indication de fuseau horaire | Des différences dans l'interprétation des libellés |
F421 | Caractères nationaux | ||
F431 | Curseurs parcourables en lecture seule | ||
F431-01 | FETCH avec NEXT explicite | ||
F431-02 | FETCH FIRST | ||
F431-03 | FETCH LAST | ||
F431-04 | FETCH PRIOR | ||
F431-05 | FETCH ABSOLUTE | ||
F431-06 | FETCH RELATIVE | ||
F441 | Support étendu des fonctions ensemblistes | ||
F471 | Coeur | Valeurs scalaires de sous-requêtes | |
F481 | Coeur | Prédicat NULL étendu | |
F491 | Gestion étendue de l'intégrité | Gestion de contrainte | |
F501 | Coeur | Vues de fonctionnalités et de conformité | |
F501-01 | Coeur | Vue SQL_FEATURES | |
F501-02 | Coeur | Vue SQL_SIZING | |
F501-03 | Coeur | Vue SQL_LANGUAGES | |
F502 | Tables de documentation étendue | ||
F502-01 | Vue SQL_SIZING_PROFILES | ||
F502-02 | Vue SQL_IMPLEMENTATION_INFO | ||
F502-03 | Vue SQL_PACKAGES | ||
F531 | Tables temporaires | ||
F555 | Fonctionnalités date-heure étendues | Précision étendue des secondes | |
F561 | Expressions en valeurs pures | ||
F571 | Tests des valeurs de vérité | ||
F591 | Tables dérivées | ||
F611 | Types indicateur de données | ||
F651 | Qualificateurs de nom de catalogue | ||
F672 | Contraintes de vérification a posteriori | ||
F701 | Gestion étendue de l'intégrité | Actualisations référentielles | |
F711 | ALTER domaine | ||
F761 | Gestion de session | ||
F771 | Gestion de Connection | ||
F781 | Opérations auto-référençantes | ||
F791 | Curseurs insensibles | ||
F801 | Fonctions ensemblistes pures | ||
S071 | Support étendu des objets | Chemins SQL dans la résolution de nom des fonctions et des types | |
S111 | Support étendu des objets | ONLY dans les expression de requête | |
S211 | Support étendu des objets | Fonctions de transtypage utilisateur | |
T031 | Type de données BOOLEAN | ||
T071 | Type de données BIGINT | ||
T141 | Prédicat SIMILAR | ||
T151 | Prédicat DISTINCT | ||
T171 | Clause LIKE dans la définition d'une table | ||
T191 | Gestion étendue de l'intégrité | RESTRICT référentiel | |
T201 | Gestion étendue de l'intégrité | Types de données comparables pour les contraintes référentielles | |
T211-01 | Gestion étendue de l'intégrité, base active | Déclencheurs activés sur UPDATE, INSERT et DELETE d'une table de base | |
T211-02 | Gestion étendue de l'intégrité, base active | Déclencheurs BEFORE | |
T211-03 | Gestion étendue de l'intégrité, base active | Déclencheurs AFTER | |
T211-04 | Gestion étendue de l'intégrité, base active | Déclencheurs FOR EACH ROW | |
T211-07 | Gestion étendue de l'intégrité, base active | Privilège TRIGGER | |
T212 | Gestion étendue de l'intégrité | Fonctionnalité étendue des déclencheurs | |
T231 | Curseurs SENSITIVE | ||
T241 | Instruction START TRANSACTION | ||
T271 | Points de retournement | ||
T312 | Fonction OVERLAY | ||
T321-01 | Coeur | Fonctions utlisateur sans surcharge | |
T321-03 | Coeur | Invocation d'une fonction | |
T321-06 | Coeur | Vue ROUTINES | |
T321-07 | Coeur | Vue PARAMETERS | |
T322 | PSM | Surcharge de fonctions et précédures appelées en SQL | |
T323 | Sécurité explicite des routines externes | ||
T351 | Commentaires SQL « bracket » (commentaires /*...*/) | ||
T441 | Fonctions ABS et MOD | ||
T461 | Prédicat BETWEEN symétrique | ||
T501 | Prédicat EXISTS étendu | ||
T551 | Mots-clés optionnels pour la syntaxe par défaut | ||
T581 | Fonction de sous-chaîne d'expression rationnelle | ||
T591 | Constraintes UNIQUE sur colonnes éventuellement NULL |