D. Conformité SQL

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 :

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é.

[Note]

Note

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.

D.1. Fonctionnalités supportées

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