SQL99 Feature List Supported Features SQL92 defined three feature sets for compliance: basic, intermediate, and advanced. Most database products claiming SQL standards compliance were compliant at only the basic level, since the entire set of intermediate and advanced features was either too voluminous or in conflict with legacy behaviors. SQL99 defines a large set of individual features rather than the ineffectively broad three levels found in SQL92. We provide a list of supported features, followed by a list of the features defined in SQL99 which are not yet supported in PostgreSQL. Identifier Description Comment E011 Numeric data types E011-01 INTEGER and SMALLINT data types E011-02 REAL, DOUBLE PRECISON, and FLOAT data types E011-03 DECIMAL and NUMERIC data types E011-04 Arithmetic operators E011-05 Numeric comparison E011-06 Implicit casting among the numeric data types E021 Character data types E021-01 CHARACTER data type E021-02 CHARACTER VARYING data type E021-03 Character literals E021-04 CHARACTER_LENGTH function E021-05 OCTET_LENGTH function E021-06 SUBSTRING function E021-07 Character concatenation E021-08 UPPER and LOWER functions E021-09 TRIM function E021-10 Implicit casting among the character data types E021-11 POSITION function E011-12 Character comparison E031 Identifiers E031-01 Delimited identifiers E031-02 Lower case identifiers E031-03 Trailing underscore E051 Basic query specification E051-01 SELECT DISTINCT E051-02 GROUP BY clause E051-04 GROUP BY can contain columns not in <select list> E051-05 Select list items can be renamed E051-06 HAVING clause E051-07 Qualified * in select list E051-08 Correlation names in the FROM clause E051-09 Rename columns in the FROM clause E061 Basic predicates and search conditions E061-01 Comparison predicate E061-02 BETWEEN predicate E061-03 IN predicate with list of values E061-04 LIKE predicate E061-05 LIKE predicate ESCAPE clause E061-06 NULL predicate E061-07 Quantified comparison predicate E061-08 EXISTS predicate E061-09 Subqueries in comparison predicate E061-11 Subqueries in IN predicate E061-12 Subqueries in quantified comparison predicate E061-13 Correlated subqueries E061-14 Search condition E071 Basic query expressions E071-01 UNION DISTINCT table operator E071-02 UNION ALL table operator E071-03 EXCEPT DISTINCT table operator E071-05 Columns combined via table operators need not have exactly the same data type E071-06 Table operators in subqueries E081 Basic Privileges E081-01 SELECT privilege E081-02 DELETE privilege E081-03 INSERT privilege at the table level E081-04 UPDATE privilege at the table level E081-06 REFERENCES privilege at the table level E081-08 WITH GRANT OPTION E091 Set functions E091-01 AVG E091-02 COUNT E091-03 MAX E091-04 MIN E091-05 SUM E091-06 ALL quantifier E091-07 DISTINCT quantifier E101 Basic data manipulation E101-01 INSERT statement E101-03 Searched UPDATE statement E101-04 Searched DELETE statement E111 Single row SELECT statement E121 Basic cursor support E121-01 DECLARE CURSOR E121-02 ORDER BY columns need not be in select list E121-03 Value expressions in ORDER BY clause E121-04 OPEN statement (cursor) E121-06 Positioned UPDATE statement (cursor) E121-07 Positioned DELETE statement (cursor) E121-08 CLOSE statement (cursor) E121-10 FETCH statement implicit NEXT E131 Null value support (nulls in lieu of values) E141 Basic integrity constraints E141-01 NOT NULL constraints E141-02 UNIQUE constraints of NOT NULL columns E141-03 PRIMARY KEY constraints E141-04 Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action E141-06 CHECK constraints E141-07 Column defaults E141-08 NOT NULL inferred on PRIMARY KEY E141-10 Names in a foreign key can be specified in any order E151 Transaction support E151-01 COMMIT statement E151-02 ROLLBACK statement E152 Basic SET TRANSACTION statement E152-01 SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause E153 Updatable queries with subqueries E161 SQL comments using leading double minus F031 Basic schema manipulation F031-01 CREATE TABLE statement to create persistent base tables F031-02 CREATE VIEW statement F031-03 GRANT statement F031-04 ALTER TABLE statement COLUMN clause F031-13 DROP TABLE statement clause F031-16 DROP VIEW statement RESTRICT clause F031-19 REVOKE statement RESTRICT clause F041 Basic joined table F041-01 Inner join (but not necessarily the INNER keyword) F041-02 INNER keyword F041-03 LEFT OUTER JOIN F041-04 RIGHT OUTER JOIN F041-05 Outer joins can be nested F041-07 The inner table in a left or right outer join can also be used in an inner join F041-08 All comparison operators are supported (rather than just =) F051 Basic date and time F051-01 DATE data type (including support of DATE literal) F051-02 TIME data type (including support of TIME literal) with fractional seconds precision of at least 0 F051-03 TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 F051-04 Comparison predicate on DATE TIMESTAMP data types F051-05 Explicit CAST between datetime types and character types F051-06 CURRENT_DATE F051-07 LOCALTIME F051-08 LOCALTIMESTAMP F081 UNION and EXCEPT in views F131 Grouped operations F131-01 WHERE, GROUP BY and HAVING clauses supported in queries with grouped views F131-02 Multiple tables supported in queries with grouped views F131-03 Set functions supported in queries with grouped views F131-04 Subqueries with GROUP BY and HAVING clauses and grouped views F131-05 Single row SELECT with GROUP BY and HAVING clauses and grouped views F181 Multiple module support Allow separate compilation modules in ecpg F201 CAST function F221 Explicit defaults F261 CASE expression F261-01 Simple CASE F261-02 Searched CASE F261-03 NULLIF F261-04 COALESCE F311 Schema definition statement F311-01 CREATE SCHEMA F311-02 CREATE TABLE for persistent base tables F311-03 CREATE VIEW F311-04 CREATE VIEW: WITH CHECK OPTION F311-05 GRANT statement F471 Scalar subquery values F481 Expanded NULL predicate S011 Distinct data types T321 Basic SQL-invoked routines T321-01 User-defined functions with no overloading T321-03 Function invocation T321-05 RETURN statement F032 CASCADE drop behavior 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 F052 Intervals and datetime arithmetic F111 Isolation levels other than SERIALIZABLE F111-02 READ COMMITTED isolation level F171 Multiple schemas per user F191 Referential delete actions F222 INSERT statement: DEFAULT VALUES clause F271 Compound character literals F281 LIKE enhancements F291 UNIQUE predicate F302 INTERSECT table operator F302-02 INTERSECT ALL table operator F304 EXCEPT ALL table operator F321 User authorization F341 Usage tables F361 Subprogram support 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 Extended joined table F401-01 NATURAL JOIN F401-02 FULL OUTER JOIN F401-03 UNION JOIN F401-04 CROSS JOIN F411 Time zone specification 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 F461 Named character sets F491 Constraint management F511 BIT data type F531 Temporary tables F555 Enhanced seconds precision F561 Full value expressions F571 Truth value tests F591 Derived tables F611 Indicator data types F641 Row and table constructors F651 Catalog name qualifiers F661 Simple tables F701 Referential update actions F741 Referential MATCH types F761 Session management F771 Connection management F791 Insensitive cursors F831 Full cursor update F831-01 Updateable scrollable cursors F831-02 Updateable ordered cursors S071 SQL paths in function and type name resolution S091 Basic array support S091-01 Arrays of built-in data types S092 Arrays of user-defined types S201 SQL routines on arrays S201-01 Array parameters S201-02 Array as result type of functions T031 BOOLEAN data type T141 SIMILAR predicate T151 DISTINCT predicate T171 LIKE clause in table definition T191 Referential action RESTRICT T201 Comparable data types for referential constraints T211 Basic trigger capability T211-01 Triggers activated on UPDATE, INSERT, or DELETE of one base table T211-02 BEFORE triggers T211-03 AFTER triggers T211-04 FOR EACH ROW triggers T211-08 Multiple triggers for the same the event are executed in the order in which they were created T212 Enhanced trigger capability T231 SENSITIVE cursors T241 START TRANSACTION statement T251 SET TRANSACTION statement: LOCAL option T312 OVERLAY function T322 Overloading of SQL-invoked functions and procedures T323 Explicit security for external routines T351 Bracketed SQL comments (/*...*/ comments) T401 INSERT into a cursor T441 ABS and MOD functions T461 Symmetric BETWEEN predicate T501 Enhanced EXISTS predicate T551 Optional key words for default syntax T571 Array-returning external SQL-invoked functions T581 Regular expression substring function T591 UNIQUE constraints of possibly null columns Unsupported Features The following features defined in SQL99 are not implemented in the current release of PostgreSQL. In a few cases, equivalent functionality is available. Identifier Description Comment E081-05 UPDATE privilege at the column level E081-07 REFERENCES privilege at the column level E121-17 WITH HOLD cursors Cursor stays open across transactions E152-02 SET TRANSACTION statement: READ ONLY and READ WRITE clauses E171 SQLSTATE support E182 Module language F021 Basic information schema F021-01 COLUMNS view F021-02 TABLES view F021-03 VIEWS view F021-04 TABLE_CONSTRAINTS view F021-05 REFERENTIAL_CONSTRAINTS view F021-06 CHECK_CONSTRAINTS view F033 ALTER TABLE statement: DROP COLUMN clause Syntax accepted F111-01 READ UNCOMMITTED isolation level F111-03 REPEATABLE READ isolation level F121 Basic diagnostics management F121-01 GET DIAGNOSTICS statement F121-02 SET TRANSACTION statement: DIAGNOSTICS SIZE clause F231 Privilege Tables F231-01 TABLE_PRIVILEGES view F231-02 COLUMN_PRIVILEGES view F231-03 USAGE_PRIVILEGES view F251 Domain support F301 CORRESPONDING in query expressions F302-01 INTERSECT DISTINCT table operator Syntax accepted F381 Extended schema manipulation F421 National character Syntax accepted F441 Extended set function support F451 Character set definition Alternate implementation F501 Features and conformance views F501-01 SQL_FEATURES view F501-02 SQL_SIZING view F501-03 SQL_LANGUAGES view F502 Enhanced documentation tables F502-01 SQL_SIZING_PROFILES view F502-02 SQL_IMPLEMENTATION_INFO view F502-03 SQL_PACKAGES view F521 Assertions F671 Subqueries in CHECK F691 Collation and translation Alternate implementation F711 ALTER domain F721 Deferrable constraints F731 INSERT column privileges F751 View CHECK enhancements F781 Self-referencing operations F801 Full set function F811 Extended flagging F812 Basic flagging F813 Extended flagging for "Core SQL Flagging" and "Catalog Lookup" only F821 Local table references S011-01 USER_DEFINED_TYPES view S023 Basic structured types S024 Enhanced structured types Alternate implementation S041 Basic reference types S043 Enhanced reference types S051 Create table of type S081 Subtables S091-02 Arrays of distinct types S091-03 Array expressions S094 Arrays of reference types S111 ONLY in query expressions S151 Type predicate IS OF (type list) S161 Subtype treatment TREAT(expr AS type) S211 User-defined cast functions CREATE CAST(type AS type) WITH S231 Structured type locators S232 Array locators S241 Transform functions S251 User-defined orderings CREATE ORDERING FOR S261 Specific type method T011 Timestamp in Information Schema T041 Basic LOB data type support T041-01 BLOB data type T041-02 CLOB data type T041-03 POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING functions for LOB data types T041-04 Concatenation of LOB data types T041-05 LOB locator: non-holdable T042 Extended LOB data type support T051 Row types T111 Updatable joins, unions, and columns T121 WITH (excluding RECURSIVE) in query expression T131 Recursive query T211-05 Ability to specify a search condition that must be true before the trigger is invoked T211-06 Support for run-time rules for the interaction of triggers and constraints T211-07 TRIGGER privilege T261 Chained transactions T271 Savepoints T281 SELECT privilege with column granularity T301 Functional Dependencies T321-02 User-defined stored procedures with no overloading T321-04 CALL statement T321-06 ROUTINES view T321-07 PARAMETERS view T331 Basic roles T332 Extended roles T411 UPDATE statement: SET ROW option T431 CUBE and ROLLUP operations T471 Result sets return value T491 LATERAL derived table T511 Transaction counts T541 Updatable table references ? T561 Holdable locators T601 Local cursor references