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

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.

  • 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  » (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 Cœur Intégration de C  
B021   SQL direct  
E011 Cœur Types de données numériques  
E011-01 Cœur INTEGER and SMALLINT data types  
E011-02 Cœur REAL, DOUBLE PRECISON, and FLOAT data types  
E011-03 Cœur DECIMAL and NUMERIC data types  
E011-04 Cœur Arithmetic operators  
E011-05 Cœur Numeric comparison  
E011-06 Cœur Implicit casting among the numeric data types  
E021 Cœur Character data types  
E021-01 Cœur CHARACTER data type  
E021-02 Cœur CHARACTER VARYING data type  
E021-03 Cœur Character literals  
E021-04 Cœur CHARACTER_LENGTH function  
E021-05 Cœur OCTET_LENGTH function  
E021-06 Cœur SUBSTRING function  
E021-07 Cœur Character concatenation  
E021-08 Cœur UPPER and LOWER functions  
E021-09 Cœur TRIM function  
E021-10 Cœur Implicit casting among the character data types  
E021-11 Cœur POSITION function  
E021-12 Cœur Character comparison  
E031 Cœur Identifiers  
E031-01 Cœur Delimited identifiers  
E031-02 Cœur Lower case identifiers  
E031-03 Cœur Trailing underscore  
E051 Cœur Basic query specification  
E051-01 Cœur SELECT DISTINCT  
E051-02 Cœur GROUP BY clause  
E051-04 Cœur GROUP BY can contain columns not in <select list>  
E051-05 Cœur Select list items can be renamed AS is required
E051-06 Cœur HAVING clause  
E051-07 Cœur Qualified * in select list  
E051-08 Cœur Correlation names in the FROM clause  
E051-09 Cœur Rename columns in the FROM clause  
E061 Cœur Basic predicates and search conditions  
E061-01 Cœur Comparison predicate  
E061-02 Cœur BETWEEN predicate  
E061-03 Cœur IN predicate with list of values  
E061-04 Cœur LIKE predicate  
E061-05 Cœur LIKE predicate ESCAPE clause  
E061-06 Cœur NULL predicate  
E061-07 Cœur Quantified comparison predicate  
E061-08 Cœur EXISTS predicate  
E061-09 Cœur Subqueries in comparison predicate  
E061-11 Cœur Subqueries in IN predicate  
E061-12 Cœur Subqueries in quantified comparison predicate  
E061-13 Cœur Correlated subqueries  
E061-14 Cœur Search condition  
E071 Cœur Basic query expressions  
E071-01 Cœur UNION DISTINCT table operator  
E071-02 Cœur UNION ALL table operator  
E071-03 Cœur EXCEPT DISTINCT table operator  
E071-05 Cœur Columns combined via table operators need not have exactly the same data type  
E071-06 Cœur Table operators in subqueries  
E081-01 Cœur SELECT privilege  
E081-02 Cœur DELETE privilege  
E081-03 Cœur INSERT privilege at the table level  
E081-04 Cœur UPDATE privilege at the table level  
E081-06 Cœur REFERENCES privilege at the table level  
E081-08 Cœur WITH GRANT OPTION  
E091 Cœur 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 ALL quantifier  
E091-07 Cœur DISTINCT quantifier  
E101 Cœur Basic data manipulation  
E101-01 Cœur INSERT statement  
E101-03 Cœur Searched UPDATE statement  
E101-04 Cœur Searched DELETE statement  
E111 Cœur Single row SELECT statement  
E121-01 Cœur DECLARE CURSOR  
E121-02 Cœur ORDER BY columns need not be in select list  
E121-03 Cœur Value expressions in ORDER BY clause  
E121-08 Cœur CLOSE statement  
E121-10 Cœur FETCH statement implicit NEXT  
E121-17 Cœur WITH HOLD cursors  
E131 Cœur Null value support (NULLs in lieu of values)  
E141 Cœur Basic integrity constraints  
E141-01 Cœur NOT NULL constraints  
E141-02 Cœur UNIQUE constraints of NOT NULL columns  
E141-03 Cœur PRIMARY KEY constraints  
E141-04 Cœur Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action  
E141-06 Cœur CHECK constraints  
E141-07 Cœur Column defaults  
E141-08 Cœur NOT NULL inferred on PRIMARY KEY  
E141-10 Cœur Names in a foreign key can be specified in any order  
E151 Cœur Transaction support  
E151-01 Cœur COMMIT statement  
E151-02 Cœur ROLLBACK statement  
E152 Cœur Basic SET TRANSACTION statement  
E152-01 Cœur SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause  
E152-02 Cœur SET TRANSACTION statement: READ ONLY and READ WRITE clauses  
E161 Cœur SQL comments using leading double minus  
F021 Cœur Basic information schema  
F021-01 Cœur COLUMNS view  
F021-02 Cœur TABLES view  
F021-03 Cœur VIEWS view  
F021-04 Cœur TABLE_CONSTRAINTS view  
F021-05 Cœur REFERENTIAL_CONSTRAINTS view  
F021-06 Cœur CHECK_CONSTRAINTS view  
F031 Cœur Basic schema manipulation  
F031-01 Cœur CREATE TABLE statement to create persistent base tables  
F031-02 Cœur CREATE VIEW statement  
F031-03 Cœur GRANT statement  
F031-04 Cœur ALTER TABLE statement: ADD COLUMN clause  
F031-13 Cœur DROP TABLE statement: RESTRICT clause  
F031-16 Cœur DROP VIEW statement: RESTRICT clause  
F031-19 Cœur 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 Cœur Basic joined table  
F041-01 Cœur Inner join (but not necessarily the INNER keyword)  
F041-02 Cœur INNER keyword  
F041-03 Cœur LEFT OUTER JOIN  
F041-04 Cœur RIGHT OUTER JOIN  
F041-05 Cœur Outer joins can be nested  
F041-07 Cœur The inner table in a left or right outer join can also be used in an inner join  
F041-08 Cœur All comparison operators are supported (rather than just =)  
F051 Cœur Basic date and time  
F051-01 Cœur DATE data type (including support of DATE literal)  
F051-02 Cœur TIME data type (including support of TIME literal) with fractional seconds precision of at least 0  
F051-03 Cœur TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6  
F051-04 Cœur Comparison predicate on DATE, TIME, and TIMESTAMP data types  
F051-05 Cœur Explicit CAST between datetime types and character types  
F051-06 Cœur CURRENT_DATE  
F051-07 Cœur LOCALTIME  
F051-08 Cœur LOCALTIMESTAMP  
F052 Enhanced datetime facilities Intervals and datetime arithmetic  
F081 Cœur UNION and EXCEPT in views  
F111-02   READ COMMITTED isolation level  
F131 Cœur Grouped operations  
F131-01 Cœur WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views  
F131-02 Cœur Multiple tables supported in queries with grouped views  
F131-03 Cœur Set functions supported in queries with grouped views  
F131-04 Cœur Subqueries with GROUP BY and HAVING clauses and grouped views  
F131-05 Cœur 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 Cœur CAST function  
F221 Cœur 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 Cœur CASE expression  
F261-01 Cœur Simple CASE  
F261-02 Cœur Searched CASE  
F261-03 Cœur NULLIF  
F261-04 Cœur 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 Cœur CREATE SCHEMA  
F311-02 Cœur CREATE TABLE for persistent base tables  
F311-03 Cœur CREATE VIEW  
F311-05 Cœur 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 Cœur Scalar subquery values  
F481 Cœur Expanded NULL predicate  
F491 Enhanced integrity management Constraint management  
F501 Cœur Features and conformance views  
F501-01 Cœur SQL_FEATURES view  
F501-02 Cœur SQL_SIZING view  
F501-03 Cœur 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 Cœur User-defined functions with no overloading  
T321-03 Cœur Function invocation  
T321-06 Cœur ROUTINES view  
T321-07 Cœur 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