PostgreSQLLa base de données la plus sophistiquée au monde.

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 :

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

[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 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