Annexe D. Compatibilité SQL

Table des matières
D.1. Fonctionnalités supportées
D.2. Fonctionnalités non supportées

Cette section tente de mettre en évidence dans quelle mesure PostgreSQL est conforme au standard SQL actuel. L'information qui suit n'est pas une indication complète de compatibilité mais présente les thèmes principaux avec autant de détails que possible, c'est-à-dire en restant raisonnable et utile pour l'utilisateur.

Le nom complet du standard SQL est ISO/IEC 9075 << Database Language SQL >>. Une version revue du standard est publiée de temps en temps dont la plus récente date de la fin 2003. Cette version est référencée en temps que ISO/IEC 9075:2003, ou de manière informelle comme SQL:2003. Les versions précédentes à celle-ci étaient SQL:1999 et SQL-92. Chaque version remplace la précédente, donc toute indication de support des versions précédentes n'a aucun mérite. Le développement de PostgreSQL tend à se conformer à la dernière version officielle dans la mesure où celle-ci ne viendrait pas s'opposer aux fonctionnalités traditionnelles ou au bon sens. Le projet PostgreSQL n'était pas représenté dans le groupe de travail ISO/IEC 9075 Working Group 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, bien que, parfois, avec une syntaxe ou une fonction légèrement différente. Une meilleure compatibilité est attendue pour les prochaines versions.

SQL-92 définit trois ensembles de fonctionnalité pour le test de compatibilité : base, intermédiaire, complète. La majorité des systèmes de gestion de bases de données se disant compatibles au standard SQL sont en général conformes au niveau des bases en vertu du fait que l'ensemble des fonctionnalités des niveaux intermédiaire et complet sont soit trop volumineux soit en conflit avec des comportements précédemment implantés.

Avec SQL99, le standard SQL a défini un vaste ensemble de fonctionnalités individuelles à la place des trois niveaux de fonctionnalités définis dans SQL-92 et dont l'efficacité est discutable. Une grande partie représente les fonctionnalités << centrales >> que chaque implémentation de SQL doit fournir. Les fonctionnalités restantes sont purement optionnelles. Certaines de ces fonctionnalités optionnelles sont regroupées au sein de << paquetages >>. Une implémentation peut ainsi se dire conforme à certains paquetages, se déclarant ainsi conforme à des groupes particuliers de fonctions.

Le standard SQL:2003 est aussi divisée en un certain nombre de parties. Chacune est connu par un pseudonyme. Notez que ces parties ne sont pas numérotées dans l'ordre.

PostgreSQL couvre les parties 1, 2 et 11. La partie 3 est similaire à l'interface ODBC et la partie 4 est similaire au langage de programmation PL/pgSQL mais une compatibilité exacte n'est pas spécifiquement voulue ou vérifiée dans chaque cas.

PostgreSQL supporte la plupart des fonctionnalités majeures de SQL:2003. Des 164 fonctionnalités requises pour une compatibilité Core, PostgreSQL est conforme sur au moins 150. De plus, il existe une longue liste de fonctionnalités supplémentaires supportées. Il est important de noter qu'au moment de l'écriture de ce texte, aucune version actuelle d'un quelconque système de gestion de bases de données n'indique une compatibilité totale au Core de SQL:2003.

Dans les deux sections suivantes, nous fournissons une liste de ces fonctionnalités supportées par PostgreSQL suivies 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 mineurs peuvent ne pas être compatibles et certaines grandes parties d'une fonctionnalité non supportée peuvent avoir été implantées. Vous pourrez trouver des informations plus précises sur ce qui fonctionne ou ne fonctionne pas dans les différents chapitres principaux de la documentation.

Note : Les codes de fonctionnalités contenant un tiret sont des sous-fonctionnalités. Le cas échéant, si une sous-fonction n'est pas supportée, la fonctionnalité de niveau supérieur sera définie comme non supportée même si d'autres sous-fonctions lui appartenant sont supportées.

D.1. Fonctionnalités supportées

IdentifiantPaquetageDescriptionCommentaire
B012CœurIntégration de C 
B021 SQL direct 
E011CœurTypes de données numériques 
E011-01CœurINTEGER and SMALLINT data types 
E011-02CœurREAL, DOUBLE PRECISON, and FLOAT data types 
E011-03CœurDECIMAL and NUMERIC data types 
E011-04CœurArithmetic operators 
E011-05CœurNumeric comparison 
E011-06CœurImplicit casting among the numeric data types 
E021CœurCharacter data types 
E021-01CœurCHARACTER data type 
E021-02CœurCHARACTER VARYING data type 
E021-03CœurCharacter literals 
E021-04CœurCHARACTER_LENGTH function 
E021-05CœurOCTET_LENGTH function 
E021-06CœurSUBSTRING function 
E021-07CœurCharacter concatenation 
E021-08CœurUPPER and LOWER functions 
E021-09CœurTRIM function 
E021-10CœurImplicit casting among the character data types 
E021-11CœurPOSITION function 
E021-12CœurCharacter comparison 
E031CœurIdentifiers 
E031-01CœurDelimited identifiers 
E031-02CœurLower case identifiers 
E031-03CœurTrailing underscore 
E051CœurBasic query specification 
E051-01CœurSELECT DISTINCT 
E051-02CœurGROUP BY clause 
E051-04CœurGROUP BY can contain columns not in <select list> 
E051-05CœurSelect list items can be renamedAS is required
E051-06CœurHAVING clause 
E051-07CœurQualified * in select list 
E051-08CœurCorrelation names in the FROM clause 
E051-09CœurRename columns in the FROM clause 
E061CœurBasic predicates and search conditions 
E061-01CœurComparison predicate 
E061-02CœurBETWEEN predicate 
E061-03CœurIN predicate with list of values 
E061-04CœurLIKE predicate 
E061-05CœurLIKE predicate ESCAPE clause 
E061-06CœurNULL predicate 
E061-07CœurQuantified comparison predicate 
E061-08CœurEXISTS predicate 
E061-09CœurSubqueries in comparison predicate 
E061-11CœurSubqueries in IN predicate 
E061-12CœurSubqueries in quantified comparison predicate 
E061-13CœurCorrelated subqueries 
E061-14CœurSearch condition 
E071CœurBasic query expressions 
E071-01CœurUNION DISTINCT table operator 
E071-02CœurUNION ALL table operator 
E071-03CœurEXCEPT DISTINCT table operator 
E071-05CœurColumns combined via table operators need not have exactly the same data type 
E071-06CœurTable operators in subqueries 
E081-01CœurSELECT privilege 
E081-02CœurDELETE privilege 
E081-03CœurINSERT privilege at the table level 
E081-04CœurUPDATE privilege at the table level 
E081-06CœurREFERENCES privilege at the table level 
E081-08CœurWITH GRANT OPTION 
E091CœurSet functions 
E091-01CœurAVG 
E091-02CœurCOUNT 
E091-03CœurMAX 
E091-04CœurMIN 
E091-05CœurSUM 
E091-06CœurALL quantifier 
E091-07CœurDISTINCT quantifier 
E101CœurBasic data manipulation 
E101-01CœurINSERT statement 
E101-03CœurSearched UPDATE statement 
E101-04CœurSearched DELETE statement 
E111CœurSingle row SELECT statement 
E121-01CœurDECLARE CURSOR 
E121-02CœurORDER BY columns need not be in select list 
E121-03CœurValue expressions in ORDER BY clause 
E121-08CœurCLOSE statement 
E121-10CœurFETCH statement implicit NEXT 
E121-17CœurWITH HOLD cursors 
E131CœurNull value support (NULLs in lieu of values) 
E141CœurBasic integrity constraints 
E141-01CœurNOT NULL constraints 
E141-02CœurUNIQUE constraints of NOT NULL columns 
E141-03CœurPRIMARY KEY constraints 
E141-04CœurBasic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action 
E141-06CœurCHECK constraints 
E141-07CœurColumn defaults 
E141-08CœurNOT NULL inferred on PRIMARY KEY 
E141-10CœurNames in a foreign key can be specified in any order 
E151CœurTransaction support 
E151-01CœurCOMMIT statement 
E151-02CœurROLLBACK statement 
E152CœurBasic SET TRANSACTION statement 
E152-01CœurSET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause 
E152-02CœurSET TRANSACTION statement: READ ONLY and READ WRITE clauses 
E161CœurSQL comments using leading double minus 
F021CœurBasic information schema 
F021-01CœurCOLUMNS view 
F021-02CœurTABLES view 
F021-03CœurVIEWS view 
F021-04CœurTABLE_CONSTRAINTS view 
F021-05CœurREFERENTIAL_CONSTRAINTS view 
F021-06CœurCHECK_CONSTRAINTS view 
F031CœurBasic schema manipulation 
F031-01CœurCREATE TABLE statement to create persistent base tables 
F031-02CœurCREATE VIEW statement 
F031-03CœurGRANT statement 
F031-04CœurALTER TABLE statement: ADD COLUMN clause 
F031-13CœurDROP TABLE statement: RESTRICT clause 
F031-16CœurDROP VIEW statement: RESTRICT clause 
F031-19CœurREVOKE 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 
F041CœurBasic joined table 
F041-01CœurInner join (but not necessarily the INNER keyword) 
F041-02CœurINNER keyword 
F041-03CœurLEFT OUTER JOIN 
F041-04CœurRIGHT OUTER JOIN 
F041-05CœurOuter joins can be nested 
F041-07CœurThe inner table in a left or right outer join can also be used in an inner join 
F041-08CœurAll comparison operators are supported (rather than just =) 
F051CœurBasic date and time 
F051-01CœurDATE data type (including support of DATE literal) 
F051-02CœurTIME data type (including support of TIME literal) with fractional seconds precision of at least 0 
F051-03CœurTIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 
F051-04CœurComparison predicate on DATE, TIME, and TIMESTAMP data types 
F051-05CœurExplicit CAST between datetime types and character types 
F051-06CœurCURRENT_DATE 
F051-07CœurLOCALTIME 
F051-08CœurLOCALTIMESTAMP 
F052Enhanced datetime facilitiesIntervals and datetime arithmetic 
F081CœurUNION and EXCEPT in views 
F111-02 READ COMMITTED isolation level 
F131CœurGrouped operations 
F131-01CœurWHERE, GROUP BY, and HAVING clauses supported in queries with grouped views 
F131-02CœurMultiple tables supported in queries with grouped views 
F131-03CœurSet functions supported in queries with grouped views 
F131-04CœurSubqueries with GROUP BY and HAVING clauses and grouped views 
F131-05CœurSingle row SELECT with GROUP BY and HAVING clauses and grouped views 
F171 Multiple schemas per user 
F191Enhanced integrity managementReferential delete actions 
F201CœurCAST function 
F221CœurExplicit 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 
F261CœurCASE expression 
F261-01CœurSimple CASE 
F261-02CœurSearched CASE 
F261-03CœurNULLIF 
F261-04CœurCOALESCE 
F271 Compound character literals 
F281 LIKE enhancements 
F302OLAP facilitiesINTERSECT table operator 
F302-01OLAP facilitiesINTERSECT DISTINCT table operator 
F302-02OLAP facilitiesINTERSECT ALL table operator 
F304OLAP facilitiesEXCEPT ALL table operator 
F311-01CœurCREATE SCHEMA 
F311-02CœurCREATE TABLE for persistent base tables 
F311-03CœurCREATE VIEW 
F311-05CœurGRANT 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 
F401OLAP facilitiesExtended joined table 
F401-01OLAP facilitiesNATURAL JOIN 
F401-02OLAP facilitiesFULL OUTER JOIN 
F401-03OLAP facilitiesUNION JOIN 
F401-04OLAP facilitiesCROSS JOIN 
F411Enhanced datetime facilitiesTime 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 
F471CœurScalar subquery values 
F481CœurExpanded NULL predicate 
F491Enhanced integrity managementConstraint management 
F501CœurFeatures and conformance views 
F501-01CœurSQL_FEATURES view 
F501-02CœurSQL_SIZING view 
F501-03CœurSQL_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 
F555Enhanced datetime facilitiesEnhanced seconds precision 
F561 Full value expressions 
F571 Truth value tests 
F591OLAP facilitiesDerived tables 
F611 Indicator data types 
F651 Catalog name qualifiers 
F701Enhanced integrity managementReferential update actions 
F711 ALTER domain 
F761 Session management 
F771 Connection management 
F781 Self-referencing operations 
F791 Insensitive cursors 
F801 Full set function 
S071Enhanced object supportSQL paths in function and type name resolution 
S111Enhanced object supportONLY in query expressions 
S211Enhanced object support, SQL/MM supportUser-defined cast functions 
T031 BOOLEAN data type 
T141 SIMILAR predicate 
T151 DISTINCT predicate 
T171 LIKE clause in table definition 
T191Enhanced integrity managementReferential action RESTRICT 
T201Enhanced integrity managementComparable data types for referential constraints 
T211-01Enhanced integrity management, Active databaseTriggers activated on UPDATE, INSERT, or DELETE of one base table 
T211-02Enhanced integrity management, Active databaseBEFORE triggers 
T211-03Enhanced integrity management, Active databaseAFTER triggers 
T211-04Enhanced integrity management, Active databaseFOR EACH ROW triggers 
T211-07Enhanced integrity management, Active databaseTRIGGER privilege 
T212Enhanced integrity managementEnhanced trigger capability 
T231 SENSITIVE cursors 
T241 START TRANSACTION statement 
T312 OVERLAY function 
T321-01CœurUser-defined functions with no overloading 
T321-03CœurFunction invocation 
T321-06CœurROUTINES view 
T321-07CœurPARAMETERS view 
T322PSM, SQL/MM supportOverloading 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