D. Conformité SQL

Cette section présente la conformité de PostgreSQL™ à la norme SQL en vigueur. Les informations qui suivent ne représentent pas une liste exhaustive de conformation, 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 portaient les noms de 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 une fonction légèrement différente. Une meilleure comformance est attendue pour les prochaines versions.

SQL-92 définissait 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 implémentation 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 » (Core), PostgreSQL est 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 actuelle de quelque système de gestion de bases de données que ce soit n'affiche une conformité « centrale » (Core) totale à SQL:2003.

Les deux sections suivantes présente une liste des fonctionnalités supportées par PostgreSQL™ suivie de la liste 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 Coeur Intégration de C  
B021   SQL direct  
E011 Coeur Types de données numériques  
E011-01 Coeur INTEGER and SMALLINT data types  
E011-02 Coeur REAL, DOUBLE PRECISON, and FLOAT data types  
E011-03 Coeur DECIMAL and NUMERIC data types  
E011-04 Coeur Arithmetic operators  
E011-05 Coeur Numeric comparison  
E011-06 Coeur Implicit casting among the numeric data types  
E021 Coeur Character data types  
E021-01 Coeur CHARACTER data type  
E021-02 Coeur CHARACTER VARYING data type  
E021-03 Coeur Character literals  
E021-04 Coeur CHARACTER_LENGTH function  
E021-05 Coeur OCTET_LENGTH function  
E021-06 Coeur SUBSTRING function  
E021-07 Coeur Character concatenation  
E021-08 Coeur UPPER and LOWER functions  
E021-09 Coeur TRIM function  
E021-10 Coeur Implicit casting among the character data types  
E021-11 Coeur POSITION function  
E021-12 Coeur Character comparison  
E031 Coeur Identifiers  
E031-01 Coeur Delimited identifiers  
E031-02 Coeur Lower case identifiers  
E031-03 Coeur Trailing underscore  
E051 Coeur Basic query specification  
E051-01 Coeur SELECT DISTINCT  
E051-02 Coeur GROUP BY clause  
E051-04 Coeur GROUP BY can contain columns not in <select list>  
E051-05 Coeur Select list items can be renamed AS is required
E051-06 Coeur HAVING clause  
E051-07 Coeur Qualified * in select list  
E051-08 Coeur Correlation names in the FROM clause  
E051-09 Coeur Rename columns in the FROM clause  
E061 Coeur Basic predicates and search conditions  
E061-01 Coeur Comparison predicate  
E061-02 Coeur BETWEEN predicate  
E061-03 Coeur IN predicate with list of values  
E061-04 Coeur LIKE predicate  
E061-05 Coeur LIKE predicate ESCAPE clause  
E061-06 Coeur NULL predicate  
E061-07 Coeur Quantified comparison predicate  
E061-08 Coeur EXISTS predicate  
E061-09 Coeur Subqueries in comparison predicate  
E061-11 Coeur Subqueries in IN predicate  
E061-12 Coeur Subqueries in quantified comparison predicate  
E061-13 Coeur Correlated subqueries  
E061-14 Coeur Search condition  
E071 Coeur Basic query expressions  
E071-01 Coeur UNION DISTINCT table operator  
E071-02 Coeur UNION ALL table operator  
E071-03 Coeur EXCEPT DISTINCT table operator  
E071-05 Coeur Columns combined via table operators need not have exactly the same data type  
E071-06 Coeur Table operators in subqueries  
E081-01 Coeur SELECT privilege  
E081-02 Coeur DELETE privilege  
E081-03 Coeur INSERT privilege at the table level  
E081-04 Coeur UPDATE privilege at the table level  
E081-06 Coeur REFERENCES privilege at the table level  
E081-08 Coeur WITH GRANT OPTION  
E091 Coeur 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 ALL quantifier  
E091-07 Coeur DISTINCT quantifier  
E101 Coeur Basic data manipulation  
E101-01 Coeur INSERT statement  
E101-03 Coeur Searched UPDATE statement  
E101-04 Coeur Searched DELETE statement  
E111 Coeur Single row SELECT statement  
E121-01 Coeur DECLARE CURSOR  
E121-02 Coeur ORDER BY columns need not be in select list  
E121-03 Coeur Value expressions in ORDER BY clause  
E121-08 Coeur CLOSE statement  
E121-10 Coeur FETCH statement implicit NEXT  
E121-17 Coeur WITH HOLD cursors  
E131 Coeur Null value support (NULLs in lieu of values)  
E141 Coeur Basic integrity constraints  
E141-01 Coeur NOT NULL constraints  
E141-02 Coeur UNIQUE constraints of NOT NULL columns  
E141-03 Coeur PRIMARY KEY constraints  
E141-04 Coeur Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action  
E141-06 Coeur CHECK constraints  
E141-07 Coeur Column defaults  
E141-08 Coeur NOT NULL inferred on PRIMARY KEY  
E141-10 Coeur Names in a foreign key can be specified in any order  
E151 Coeur Transaction support  
E151-01 Coeur COMMIT statement  
E151-02 Coeur ROLLBACK statement  
E152 Coeur Basic SET TRANSACTION statement  
E152-01 Coeur SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause  
E152-02 Coeur SET TRANSACTION statement: READ ONLY and READ WRITE clauses  
E161 Coeur SQL comments using leading double minus  
F021 Coeur Basic information schema  
F021-01 Coeur COLUMNS view  
F021-02 Coeur TABLES view  
F021-03 Coeur VIEWS view  
F021-04 Coeur TABLE_CONSTRAINTS view  
F021-05 Coeur REFERENTIAL_CONSTRAINTS view  
F021-06 Coeur CHECK_CONSTRAINTS view  
F031 Coeur Basic schema manipulation  
F031-01 Coeur CREATE TABLE statement to create persistent base tables  
F031-02 Coeur CREATE VIEW statement  
F031-03 Coeur GRANT statement  
F031-04 Coeur ALTER TABLE statement: ADD COLUMN clause  
F031-13 Coeur DROP TABLE statement: RESTRICT clause  
F031-16 Coeur DROP VIEW statement: RESTRICT clause  
F031-19 Coeur REVOKE statement: RESTRICT clause  
F032   CASCADE drop behavior  
F033   ALTER TABLE statement: DROP COLUMN clause  
F034   Extended REVOKE statement  
F034-01   REVOKE statement performed by other than the owner of a schema object  
F034-02   REVOKE statement: GRANT OPTION FOR clause  
F034-03   REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION  
F041 Coeur Basic joined table  
F041-01 Coeur Inner join (but not necessarily the INNER keyword)  
F041-02 Coeur INNER keyword  
F041-03 Coeur LEFT OUTER JOIN  
F041-04 Coeur RIGHT OUTER JOIN  
F041-05 Coeur Outer joins can be nested  
F041-07 Coeur The inner table in a left or right outer join can also be used in an inner join  
F041-08 Coeur All comparison operators are supported (rather than just =)  
F051 Coeur Basic date and time  
F051-01 Coeur DATE data type (including support of DATE literal)  
F051-02 Coeur TIME data type (including support of TIME literal) with fractional seconds precision of at least 0  
F051-03 Coeur TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6  
F051-04 Coeur Comparison predicate on DATE, TIME, and TIMESTAMP data types  
F051-05 Coeur Explicit CAST between datetime types and character types  
F051-06 Coeur CURRENT_DATE  
F051-07 Coeur LOCALTIME  
F051-08 Coeur LOCALTIMESTAMP  
F052 Enhanced datetime facilities Intervals and datetime arithmetic  
F081 Coeur UNION and EXCEPT in views  
F111-02   READ COMMITTED isolation level  
F131 Coeur Grouped operations  
F131-01 Coeur WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views  
F131-02 Coeur Multiple tables supported in queries with grouped views  
F131-03 Coeur Set functions supported in queries with grouped views  
F131-04 Coeur Subqueries with GROUP BY and HAVING clauses and grouped views  
F131-05 Coeur Single row SELECT with GROUP BY and HAVING clauses and grouped views  
F171   Multiple schemas per user  
F191 Enhanced integrity management Referential delete actions  
F201 Coeur CAST function  
F221 Coeur Explicit defaults  
F222   INSERT statement: DEFAULT VALUES clause  
F231   Privilege Tables  
F231-01   TABLE_PRIVILEGES view  
F231-02   COLUMN_PRIVILEGES view  
F231-03   USAGE_PRIVILEGES view  
F251   Domain support  
F261 Coeur CASE expression  
F261-01 Coeur Simple CASE  
F261-02 Coeur Searched CASE  
F261-03 Coeur NULLIF  
F261-04 Coeur COALESCE  
F271   Compound character literals  
F281   LIKE enhancements  
F302 OLAP facilities INTERSECT table operator  
F302-01 OLAP facilities INTERSECT DISTINCT table operator  
F302-02 OLAP facilities INTERSECT ALL table operator  
F304 OLAP facilities EXCEPT ALL table operator  
F311-01 Coeur CREATE SCHEMA  
F311-02 Coeur CREATE TABLE for persistent base tables  
F311-03 Coeur CREATE VIEW  
F311-05 Coeur GRANT statement  
F321   User authorization  
F361   Subprogram support  
F381   Extended schema manipulation  
F381-01   ALTER TABLE statement: ALTER COLUMN clause  
F381-02   ALTER TABLE statement: ADD CONSTRAINT clause  
F381-03   ALTER TABLE statement: DROP CONSTRAINT clause  
F391   Long identifiers  
F401 OLAP facilities Extended joined table  
F401-01 OLAP facilities NATURAL JOIN  
F401-02 OLAP facilities FULL OUTER JOIN  
F401-03 OLAP facilities UNION JOIN  
F401-04 OLAP facilities CROSS JOIN  
F411 Enhanced datetime facilities Time zone specification  
F421   National character  
F431   Read-only scrollable cursors  
F431-01   FETCH with explicit NEXT  
F431-02   FETCH FIRST  
F431-03   FETCH LAST  
F431-04   FETCH PRIOR  
F431-05   FETCH ABSOLUTE  
F431-06   FETCH RELATIVE  
F441   Extended set function support  
F471 Coeur Scalar subquery values  
F481 Coeur Expanded NULL predicate  
F491 Enhanced integrity management Constraint management  
F501 Coeur Features and conformance views  
F501-01 Coeur SQL_FEATURES view  
F501-02 Coeur SQL_SIZING view  
F501-03 Coeur SQL_LANGUAGES view  
F502   Enhanced documentation tables  
F502-01   SQL_SIZING_PROFILES view  
F502-02   SQL_IMPLEMENTATION_INFO view  
F502-03   SQL_PACKAGES view  
F511   BIT data type  
F531   Temporary tables  
F555 Enhanced datetime facilities Enhanced seconds precision  
F561   Full value expressions  
F571   Truth value tests  
F591 OLAP facilities Derived tables  
F611   Indicator data types  
F651   Catalog name qualifiers  
F701 Enhanced integrity management Referential update actions  
F711   ALTER domain  
F761   Session management  
F771   Connection management  
F781   Self-referencing operations  
F791   Insensitive cursors  
F801   Full set function  
S071 Enhanced object support SQL paths in function and type name resolution  
S111 Enhanced object support ONLY in query expressions  
S211 Enhanced object support, SQL/MM support User-defined cast functions  
T031   BOOLEAN data type  
T141   SIMILAR predicate  
T151   DISTINCT predicate  
T171   LIKE clause in table definition  
T191 Enhanced integrity management Referential action RESTRICT  
T201 Enhanced integrity management Comparable data types for referential constraints  
T211-01 Enhanced integrity management, Active database Triggers activated on UPDATE, INSERT, or DELETE of one base table  
T211-02 Enhanced integrity management, Active database BEFORE triggers  
T211-03 Enhanced integrity management, Active database AFTER triggers  
T211-04 Enhanced integrity management, Active database FOR EACH ROW triggers  
T211-07 Enhanced integrity management, Active database TRIGGER privilege  
T212 Enhanced integrity management Enhanced trigger capability  
T231   SENSITIVE cursors  
T241   START TRANSACTION statement  
T312   OVERLAY function  
T321-01 Coeur User-defined functions with no overloading  
T321-03 Coeur Function invocation  
T321-06 Coeur ROUTINES view  
T321-07 Coeur PARAMETERS view  
T322 PSM, SQL/MM support Overloading of SQL-invoked functions and procedures  
T323   Explicit security for external routines  
T351   Bracketed SQL comments (/*...*/ comments)  
T441   ABS and MOD functions  
T501   Enhanced EXISTS predicate  
T551   Optional key words for default syntax  
T581   Regular expression substring function  
T591   UNIQUE constraints of possibly NULL columns