Documentation PostgreSQL 8.2.23 > Annexes > Conformité SQL | |
Mots-clé SQL | Fonctionnalités non supportées |
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 | Cœur | Types de données numériques | |
E011-01 | Cœur | Types de données INTEGER et SMALLINT | |
E011-02 | Cœur | Types de données REAL, DOUBLE PRECISON et FLOAT | |
E011-03 | Cœur | Types de données DECIMAL et NUMERIC | |
E011-04 | Cœur | Opérateurs arithmétiques | |
E011-05 | Cœur | Comparaison numérique | |
E011-06 | Cœur | Transtypage implicite entre types de données numériques | |
E021 | Cœur | Character data types | |
E021-01 | Cœur | CHARACTER data type | |
E021-02 | Cœur | Type de données CHARACTER VARYING | |
E021-03 | Cœur | Libellés | |
E021-04 | Cœur | Fonction CHARACTER_LENGTH | |
E021-05 | Cœur | Fonction OCTET_LENGTH | |
E021-06 | Cœur | Fonction SUBSTRING | |
E021-07 | Cœur | Concaténation de caractères | |
E021-08 | Cœur | Fonctions UPPER et LOWER | |
E021-09 | Cœur | Fonction TRIM | |
E021-10 | Cœur | Transtypage implicite entre types de données caractères | |
E021-11 | Cœur | Fonction POSITION | |
E021-12 | Cœur | Comparaison de caractères | |
E031 | Cœur | Identifiants | |
E031-01 | Cœur | Identifiants délimités | |
E031-02 | Cœur | Identifiants minuscules | |
E031-03 | Cœur | Tirets bas de fin (Trailing underscore | |
E051 | Cœur | Spécification de requête basique | |
E051-01 | Cœur | SELECT DISTINCT | |
E051-02 | Cœur | Clause GROUP BY | |
E051-04 | Cœur | GROUP BY peut contenir des colonnes en dehors de la <select list> | |
E051-05 | Cœur | Les éléments de la <select list> peuvent être renommés | AS est obligatoire |
E051-06 | Cœur | Clause HAVING | |
E051-07 | Cœur | * qualifié dans la <select list> | |
E051-08 | Cœur | Noms de corrélation dans la clause FROM | |
E051-09 | Cœur | Renommer les colonnes de la clause FROM | |
E061 | Cœur | Prédicats et conditions de recherche de base | |
E061-01 | Cœur | Prédicat de comparaison | |
E061-02 | Cœur | Prédicat BETWEEN | |
E061-03 | Cœur | Prédicat IN avec une liste de valeurs | |
E061-04 | Cœur | Prédicat LIKE | |
E061-05 | Cœur | Prédicat LIKE clause ESCAPE | |
E061-06 | Cœur | Prédicat NULL | |
E061-07 | Cœur | Prédicat de comparaison qunatifiée | |
E061-08 | Cœur | Prédicat EXISTS | |
E061-09 | Cœur | Sous-requêtes dans un prédicat de comparaison | |
E061-11 | Cœur | Sous-requêtes dans un prédicat IN | |
E061-12 | Cœur | Sous-requêtes dans un prédicat de comparaison qunatifiée | |
E061-13 | Cœur | Sous-requêtes corrélées | |
E061-14 | Cœur | Condition de recherche | |
E071 | Cœur | Expressions de requête basiques | |
E071-01 | Cœur | Opérateur de table UNION DISTINCT | |
E071-02 | Cœur | Opérateur de table UNION ALL | |
E071-03 | Cœur | Opérateur de table EXCEPT DISTINCT | |
E071-05 | Cœur | Les colonnes combinées par des opérateurs de table doivent avoir exactement le même type de données | |
E071-06 | Cœur | Opérateurs de table dans les sous-requêtes | |
E081-01 | Cœur | Privilège SELECT | |
E081-02 | Cœur | Privilège DELETE | |
E081-03 | Cœur | Privilège INSERT de niveau table | |
E081-04 | Cœur | Privilège UPDATE de niveau table | |
E081-06 | Cœur | Privilège REFERENCES de niveau table | |
E081-08 | Cœur | WITH GRANT OPTION | |
E081-10 | Cœur | Privilège EXECUTE | |
E091 | Cœur | Fonctions ensemblistes (Set functions) | |
E091-01 | Cœur | AVG | |
E091-02 | Cœur | COUNT | |
E091-03 | Cœur | MAX | |
E091-04 | Cœur | MIN | |
E091-05 | Cœur | SUM | |
E091-06 | Cœur | Quantificateur ALL | |
E091-07 | Cœur | Quantificateur DISTINCT | |
E101 | Cœur | Manipulation de données basique | |
E101-01 | Cœur | Instruction INSERT | |
E101-03 | Cœur | Instruction UPDATE sur recherche | |
E101-04 | Cœur | Instruction DELETE sur recherche | |
E111 | Cœur | Instruction SELECT sur ligne unique | |
E121-01 | Cœur | DECLARE CURSOR | |
E121-02 | Cœur | Les colonnes de l'ORDER BY n'ont pas besoin d'être dans la <select list> | |
E121-03 | Cœur | Expressions valuées dans une clause ORDER BY | |
E121-04 | Cœur | Instruction OPEN | |
E121-08 | Cœur | Instruction CLOSE | |
E121-10 | Cœur | Instruction FETCH à NEXT implicite | |
E121-17 | Cœur | Curseurs WITH HOLD | |
E131 | Cœur | Support des valeurs nulles (NULL comme valeur) | |
E141 | Cœur | Contraintes d'intégrité basiques | |
E141-01 | Cœur | Contraintes NOT NULL | |
E141-02 | Cœur | Contraintes UNIQUE des colonnes NOT NULL | |
E141-03 | Cœur | Contraintes PRIMARY KEY | |
E141-04 | Cœur | 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 | Cœur | Contraintes CHECK | |
E141-07 | Cœur | Valeur par défaut de la colonne | |
E141-08 | Cœur | NOT NULL inféré sur PRIMARY KEY | |
E141-10 | Cœur | L'ordre des noms au sein d'une clé étrangère n'a aucune importance | |
E151 | Cœur | Support des transactions | |
E151-01 | Cœur | Instruction COMMIT | |
E151-02 | Cœur | Instruction ROLLBACK | |
E152 | Cœur | Instruction SET TRANSACTION basique | |
E152-01 | Cœur | Instruction SET TRANSACTION : clause ISOLATION LEVEL SERIALIZABLE | |
E152-02 | Cœur | Instruction SET TRANSACTION : clauses READ ONLY et READ WRITE | |
E161 | Cœur | Commentaires SQL définis avec deux tirets hauts en début de chaîne | |
E171 | Cœur | Support de SQLSTATE | |
F021 | Cœur | Schéma d'information basique | |
F021-01 | Cœur | Vue COLUMNS | |
F021-02 | Cœur | Vue TABLES | |
F021-03 | Cœur | Vue VIEWS | |
F021-04 | Cœur | Vue TABLE_CONSTRAINTS | |
F021-05 | Cœur | Vue REFERENTIAL_CONSTRAINTS | |
F021-06 | Cœur | Vue CHECK_CONSTRAINTS | |
F031 | Cœur | Manipulation basique de schéma | |
F031-01 | Cœur | Instruction CREATE TABLE de création de tables de base persistentes | |
F031-02 | Cœur | Instruction CREATE VIEW | |
F031-03 | Cœur | Instruction GRANT | |
F031-04 | Cœur | Instruction ALTER TABLE ;: clause ADD COLUMN | |
F031-13 | Cœur | Instruction DROP TABLE : clause RESTRICT | |
F031-16 | Cœur | Instruction DROP VIEW : clause RESTRICT | |
F031-19 | Cœur | 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 | Cœur | Table jointe basique | |
F041-01 | Cœur | Jointure interne (mais pas nécessairement le mot-clé INNER) | |
F041-02 | Cœur | Mot-clé INNER | |
F041-03 | Cœur | LEFT OUTER JOIN | |
F041-04 | Cœur | RIGHT OUTER JOIN | |
F041-05 | Cœur | Les jointures externes peuvent être imbriquées | |
F041-07 | Cœur | La table interne d'une jointure externe droite ou gauche peut aussi être utilisée dans une jointure interne | |
F041-08 | Cœur | Tous les opérateurs de comparaison sont supportés (plutôt que juste =) | |
F051 | Cœur | Date et heure basiques | |
F051-01 | Cœur | Type de données DATE (incluant le support des libellés DATE) | |
F051-02 | Cœur | 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 | Cœur | 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 | Cœur | Prédicat de comparaison des types de données DATE, TIME et TIMESTAMP | |
F051-05 | Cœur | CAST explicite entre types date-heure et types caractère | |
F051-06 | Cœur | CURRENT_DATE | |
F051-07 | Cœur | LOCALTIME | |
F051-08 | Cœur | LOCALTIMESTAMP | |
F052 | Fonctionnalités date-heure évoluées | Arithmétique des intervalles et date-heure | |
F053 | Prédicat OVERLAPS | ||
F081 | Cœur | 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 | Cœur | Opérations groupées | |
F131-01 | Cœur | Clauses WHERE, GROUP BY et HAVING supportées dans les requêtes avec vues groupées | |
F131-02 | Cœur | Tables multiples supportées dans les requêtes avec vues groupées | |
F131-03 | Cœur | Fonctions ensemblistes supportées dans les requêtes avec vues groupées | |
F131-04 | Cœur | Sous-requêtes avec clauses GROUP BY et HAVING et vues groupées | |
F131-05 | Cœur | 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 | Cœur | Fonction CAST | |
F221 | Cœur | 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 | Cœur | Expression CASE | |
F261-01 | Cœur | CASE simple | |
F261-02 | Cœur | CASE recherché | |
F261-03 | Cœur | NULLIF | |
F261-04 | Cœur | 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 | Cœur | CREATE SCHEMA | |
F311-02 | Cœur | CREATE TABLE pour tables de base persistentes | |
F311-03 | Cœur | CREATE VIEW | |
F311-05 | Cœur | 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 | Cœur | Valeurs scalaires de sous-requêtes | |
F481 | Cœur | Prédicat NULL étendu | |
F491 | Gestion étendue de l'intégrité | Gestion de contrainte | |
F501 | Cœur | Vues de fonctionnalités et de conformité | |
F501-01 | Cœur | Vue SQL_FEATURES | |
F501-02 | Cœur | Vue SQL_SIZING | |
F501-03 | Cœur | 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 | Cœur | Fonctions utlisateur sans surcharge | |
T321-03 | Cœur | Invocation d'une fonction | |
T321-06 | Cœur | Vue ROUTINES | |
T321-07 | Cœur | 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 | Contraintes UNIQUE sur colonnes éventuellement NULL |