SQL99 Feature List
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.
Supported Features
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
F302
INTERSECT table operator
F302-01
INTERSECT DISTINCT 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
Updatable scrollable cursors
F831-02
Updatable ordered cursors
S051
Create table of type
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
S151
Type predicate
IS OF
S201
SQL routines on arrays
S201-01
Array parameters
S201-02
Array as result type of functions
S211
User-defined cast functions
CREATE CAST(type AS type)
T031
BOOLEAN data type
T141
SIMILAR predicate
T151
DISTINCT predicate
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
Syntax accepted; READ ONLY not supported
E171
SQLSTATE support
E182
Module language
Alternate implementation
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
Alternate implementation
F291
UNIQUE predicate
F301
CORRESPONDING in query expressions
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
XXX May have this already
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
Alternate implementation
S024
Enhanced structured types
Alternate implementation
S041
Basic reference types
S043
Enhanced reference types
S081
Subtables
S091-02
Arrays of distinct types
S091-03
Array expressions
S094
Arrays of reference types
S111
ONLY in query expressions
S161
Subtype treatment
TREAT(expr AS type)
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
T171
LIKE clause in table definition
CREATE TABLE T1 (LIKE T2)
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