doc: Update SQL features/conformance information to SQL:2023

Optional subfeatures have been changed to top-level features, so there
is a bit of a churn in the list for that.

Some existing functions have been added to the standard, so they are
moved from the "other" to the "standard" lists in their sections.

Discussion: https://www.postgresql.org/message-id/flat/63f285d9-4ec8-0c9e-4bf5-e76334ddc0af@enterprisedb.com
This commit is contained in:
Peter Eisentraut 2023-04-05 08:55:44 +02:00
parent fb6fad6ef1
commit c9f57541d9
6 changed files with 273 additions and 238 deletions

View File

@ -1242,8 +1242,7 @@ SELECT '52093.89'::money::numeric::float8;
than zero and cannot exceed 10485760.
<type>character</type> without length specifier is equivalent to
<type>character(1)</type>. If <type>character varying</type> is used
without length specifier, the type accepts strings of any size. The
latter behavior is a <productname>PostgreSQL</productname> extension.
without length specifier, the type accepts strings of any size.
</para>
<para>

View File

@ -14,9 +14,9 @@
<para>
The formal name of the SQL standard is ISO/IEC 9075 <quote>Database
Language SQL</quote>. A revised version of the standard is released
from time to time; the most recent update appearing in 2016.
The 2016 version is referred to as ISO/IEC 9075:2016, or simply as SQL:2016.
The versions prior to that were SQL:2011, SQL:2008, SQL:2006, SQL:2003,
from time to time; the most recent update appearing in 2023.
The 2023 version is referred to as ISO/IEC 9075:2023, or simply as SQL:2023.
The versions prior to that were SQL:2016, SQL:2011, SQL:2008, SQL:2006, SQL:2003,
SQL:1999, and SQL-92. Each version
replaces the previous one, so claims of conformance to earlier
versions have no official merit.
@ -62,6 +62,7 @@
<listitem><para>ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT)</para><indexterm><primary>SQL/JRT</primary></indexterm></listitem>
<listitem><para>ISO/IEC 9075-14 XML-related specifications (SQL/XML)</para><indexterm><primary>SQL/XML</primary></indexterm></listitem>
<listitem><para>ISO/IEC 9075-15 Multi-dimensional arrays (SQL/MDA)</para><indexterm><primary>SQL/MDA</primary></indexterm></listitem>
<listitem><para>ISO/IEC 9075-16 Property Graph Queries (SQL/PGQ)</para><indexterm><primary>SQL/PGQ</primary></indexterm></listitem>
</itemizedlist>
Note that some part numbers are not (or no longer) used.
@ -72,23 +73,23 @@
11, and 14. Part 3 is covered by the ODBC driver, and part 13 is
covered by the PL/Java plug-in, but exact conformance is currently
not being verified for these components. There are currently no
implementations of parts 4, 10, and 15
implementations of parts 4, 10, 15, and 16
for <productname>PostgreSQL</productname>.
</para>
<para>
PostgreSQL supports most of the major features of SQL:2016. Out of
PostgreSQL supports most of the major features of SQL:2023. Out of
177 mandatory features required for full Core conformance,
PostgreSQL conforms to at least 170. In addition, there is a long
list of supported optional features. It might be worth noting that at
the time of writing, no current version of any database management
system claims full conformance to Core SQL:2016.
system claims full conformance to Core SQL:2023.
</para>
<para>
In the following two sections, we provide a list of those features
that <productname>PostgreSQL</productname> supports, followed by a
list of the features defined in <acronym>SQL:2016</acronym> which
list of the features defined in <acronym>SQL:2023</acronym> which
are not yet supported in <productname>PostgreSQL</productname>.
Both of these lists are approximate: There might be minor details that
are nonconforming for a feature that is listed as supported, and
@ -135,7 +136,7 @@
<title>Unsupported Features</title>
<para>
The following features defined in <acronym>SQL:2016</acronym> are not
The following features defined in <acronym>SQL:2023</acronym> are not
implemented in this release of
<productname>PostgreSQL</productname>. In a few cases, equivalent
functionality is available.

View File

@ -2452,6 +2452,26 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>btrim</primary>
</indexterm>
<function>btrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters
in <parameter>characters</parameter> (a space by default)
from the start and end of <parameter>string</parameter>.
</para>
<para>
<literal>btrim('xyxtrimyyx', 'xyz')</literal>
<returnvalue>trim</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -2547,6 +2567,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>lpad</primary>
</indexterm>
<function>lpad</function> ( <parameter>string</parameter> <type>text</type>,
<parameter>length</parameter> <type>integer</type>
<optional>, <parameter>fill</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Extends the <parameter>string</parameter> to length
<parameter>length</parameter> by prepending the characters
<parameter>fill</parameter> (a space by default). If the
<parameter>string</parameter> is already longer than
<parameter>length</parameter> then it is truncated (on the right).
</para>
<para>
<literal>lpad('hi', 5, 'xy')</literal>
<returnvalue>xyxhi</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>ltrim</primary>
</indexterm>
<function>ltrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters in
<parameter>characters</parameter> (a space by default) from the start of
<parameter>string</parameter>.
</para>
<para>
<literal>ltrim('zzzytest', 'xyz')</literal>
<returnvalue>test</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -2650,6 +2713,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rpad</primary>
</indexterm>
<function>rpad</function> ( <parameter>string</parameter> <type>text</type>,
<parameter>length</parameter> <type>integer</type>
<optional>, <parameter>fill</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Extends the <parameter>string</parameter> to length
<parameter>length</parameter> by appending the characters
<parameter>fill</parameter> (a space by default). If the
<parameter>string</parameter> is already longer than
<parameter>length</parameter> then it is truncated.
</para>
<para>
<literal>rpad('hi', 5, 'xy')</literal>
<returnvalue>hixyx</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rtrim</primary>
</indexterm>
<function>rtrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters in
<parameter>characters</parameter> (a space by default) from the end of
<parameter>string</parameter>.
</para>
<para>
<literal>rtrim('testxxzx', 'xyz')</literal>
<returnvalue>test</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -2842,26 +2948,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>btrim</primary>
</indexterm>
<function>btrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters
in <parameter>characters</parameter> (a space by default)
from the start and end of <parameter>string</parameter>.
</para>
<para>
<literal>btrim('xyxtrimyyx', 'xyz')</literal>
<returnvalue>trim</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -2999,49 +3085,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>lpad</primary>
</indexterm>
<function>lpad</function> ( <parameter>string</parameter> <type>text</type>,
<parameter>length</parameter> <type>integer</type>
<optional>, <parameter>fill</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Extends the <parameter>string</parameter> to length
<parameter>length</parameter> by prepending the characters
<parameter>fill</parameter> (a space by default). If the
<parameter>string</parameter> is already longer than
<parameter>length</parameter> then it is truncated (on the right).
</para>
<para>
<literal>lpad('hi', 5, 'xy')</literal>
<returnvalue>xyxhi</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>ltrim</primary>
</indexterm>
<function>ltrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters in
<parameter>characters</parameter> (a space by default) from the start of
<parameter>string</parameter>.
</para>
<para>
<literal>ltrim('zzzytest', 'xyz')</literal>
<returnvalue>test</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -3505,49 +3548,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rpad</primary>
</indexterm>
<function>rpad</function> ( <parameter>string</parameter> <type>text</type>,
<parameter>length</parameter> <type>integer</type>
<optional>, <parameter>fill</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Extends the <parameter>string</parameter> to length
<parameter>length</parameter> by appending the characters
<parameter>fill</parameter> (a space by default). If the
<parameter>string</parameter> is already longer than
<parameter>length</parameter> then it is truncated.
</para>
<para>
<literal>rpad('hi', 5, 'xy')</literal>
<returnvalue>hixyx</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rtrim</primary>
</indexterm>
<function>rtrim</function> ( <parameter>string</parameter> <type>text</type>
<optional>, <parameter>characters</parameter> <type>text</type> </optional> )
<returnvalue>text</returnvalue>
</para>
<para>
Removes the longest string containing only characters in
<parameter>characters</parameter> (a space by default) from the end of
<parameter>string</parameter>.
</para>
<para>
<literal>rtrim('testxxzx', 'xyz')</literal>
<returnvalue>test</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -4138,6 +4138,46 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>btrim</primary>
</indexterm>
<function>btrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the start and end of
<parameter>bytes</parameter>.
</para>
<para>
<literal>btrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x345678</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>ltrim</primary>
</indexterm>
<function>ltrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the start of
<parameter>bytes</parameter>.
</para>
<para>
<literal>ltrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x34567890</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -4196,6 +4236,26 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rtrim</primary>
</indexterm>
<function>rtrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the end of
<parameter>bytes</parameter>.
</para>
<para>
<literal>rtrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x12345678</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -4306,26 +4366,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>btrim</primary>
</indexterm>
<function>btrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the start and end of
<parameter>bytes</parameter>.
</para>
<para>
<literal>btrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x345678</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -4406,26 +4446,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>ltrim</primary>
</indexterm>
<function>ltrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the start of
<parameter>bytes</parameter>.
</para>
<para>
<literal>ltrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x34567890</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -4444,26 +4464,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
<primary>rtrim</primary>
</indexterm>
<function>rtrim</function> ( <parameter>bytes</parameter> <type>bytea</type>,
<parameter>bytesremoved</parameter> <type>bytea</type> )
<returnvalue>bytea</returnvalue>
</para>
<para>
Removes the longest string containing only bytes appearing in
<parameter>bytesremoved</parameter> from the end of
<parameter>bytes</parameter>.
</para>
<para>
<literal>rtrim('\x1234567890'::bytea, '\x9012'::bytea)</literal>
<returnvalue>\x12345678</returnvalue>
</para></entry>
</row>
<row>
<entry role="func_table_entry"><para role="func_signature">
<indexterm>
@ -18354,16 +18354,14 @@ SELECT NULLIF(value, '(none)') ...
largest or smallest value from a list of any number of expressions.
The expressions must all be convertible to a common data type, which
will be the type of the result
(see <xref linkend="typeconv-union-case"/> for details). NULL values
in the list are ignored. The result will be NULL only if all the
expressions evaluate to NULL.
(see <xref linkend="typeconv-union-case"/> for details).
</para>
<para>
Note that <function>GREATEST</function> and <function>LEAST</function> are not in
the SQL standard, but are a common extension. Some other databases
make them return NULL if any argument is NULL, rather than only when
all are NULL.
NULL values in the argument list are ignored. The result will be NULL
only if all the expressions evaluate to NULL. (This is a deviation from
the SQL standard. According to the standard, the return value is NULL if
any argument is NULL. Some other databases behave this way.)
</para>
</sect2>
</sect1>

View File

@ -1770,6 +1770,7 @@ INSERT INTO sql_parts VALUES ('11', 'Information and Definition Schema (SQL/Sche
INSERT INTO sql_parts VALUES ('13', 'Routines and Types Using the Java Programming Language (SQL/JRT)', 'NO', NULL, '');
INSERT INTO sql_parts VALUES ('14', 'XML-Related Specifications (SQL/XML)', 'NO', NULL, '');
INSERT INTO sql_parts VALUES ('15', 'Multi-Dimensional Arrays (SQL/MDA)', 'NO', NULL, '');
INSERT INTO sql_parts VALUES ('16', 'Property Graph Queries (SQL/PGQ)', 'NO', NULL, '');
/*

View File

@ -6,12 +6,13 @@ B015 Embedded MUMPS NO
B016 Embedded Pascal NO
B017 Embedded PL/I NO
B021 Direct SQL YES
B030 Enhanced dynamic SQL NO
B031 Basic dynamic SQL NO
B032 Extended dynamic SQL NO
B032 Extended dynamic SQL 01 <describe input statement> NO
B033 Untyped SQL-invoked function arguments NO
B034 Dynamic specification of cursor attributes NO
B035 Non-extended descriptor names NO
B036 Describe input statement NO
B041 Extensions to embedded SQL exception declarations NO
B051 Enhanced execution rights NO
B111 Module language Ada NO
@ -31,7 +32,7 @@ B127 Routine language PL/I NO
B128 Routine language SQL YES
B200 Polymorphic table functions NO
B201 More than one PTF generic table parameter NO
B202 PTF Copartitioning NO
B202 PTF copartitioning NO
B203 More than one copartition specification NO
B204 PRUNE WHEN EMPTY NO
B205 Pass-through columns NO
@ -166,9 +167,10 @@ F031 Basic schema manipulation 19 REVOKE statement: RESTRICT clause YES
F032 CASCADE drop behavior YES
F033 ALTER TABLE statement: DROP COLUMN clause YES
F034 Extended REVOKE statement YES
F034 Extended REVOKE statement 01 REVOKE statement performed by other than the owner of a schema object YES
F034 Extended REVOKE statement 02 REVOKE statement: GRANT OPTION FOR clause YES
F034 Extended REVOKE statement 03 REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION YES
F035 REVOKE with CASCADE YES
F036 REVOKE statement performed by non-owner YES
F037 REVOKE statement: GRANT OPTION FOR clause YES
F038 REVOKE of a WITH GRANT OPTION privilege YES
F041 Basic joined table YES
F041 Basic joined table 01 Inner join (but not necessarily the INNER keyword) YES
F041 Basic joined table 02 INNER keyword YES
@ -191,14 +193,14 @@ F053 OVERLAPS predicate YES
F054 TIMESTAMP in DATE type precedence list NO
F081 UNION and EXCEPT in views YES
F111 Isolation levels other than SERIALIZABLE YES
F111 Isolation levels other than SERIALIZABLE 01 READ UNCOMMITTED isolation level YES
F111 Isolation levels other than SERIALIZABLE 02 READ COMMITTED isolation level YES
F111 Isolation levels other than SERIALIZABLE 03 REPEATABLE READ isolation level YES
F112 Isolation level READ UNCOMMITTED YES
F113 Isolation level READ COMMITTED YES
F114 Isolation level REPEATABLE READ YES
F120 Get diagnostics statement NO
F121 Basic diagnostics management NO
F121 Basic diagnostics management 01 GET DIAGNOSTICS statement NO
F121 Basic diagnostics management 02 SET TRANSACTION statement: DIAGNOSTICS SIZE clause NO
F122 Enhanced diagnostics management NO
F123 All diagnostics NO
F124 SET TRANSACTION statement: DIAGNOSTICS SIZE clause NO
F131 Grouped operations YES
F131 Grouped operations 01 WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views YES
F131 Grouped operations 02 Multiple tables supported in queries with grouped views YES
@ -214,9 +216,6 @@ F202 TRUNCATE TABLE: identity column restart option YES
F221 Explicit defaults YES
F222 INSERT statement: DEFAULT VALUES clause YES
F231 Privilege tables YES
F231 Privilege tables 01 TABLE_PRIVILEGES view YES
F231 Privilege tables 02 COLUMN_PRIVILEGES view YES
F231 Privilege tables 03 USAGE_PRIVILEGES view YES
F251 Domain support YES
F261 CASE expression YES
F261 CASE expression 01 Simple CASE YES
@ -228,12 +227,13 @@ F263 Comma-separated predicates in simple CASE expression NO
F271 Compound character literals YES
F281 LIKE enhancements YES
F291 UNIQUE predicate NO
F292 UNIQUE null treatment YES SQL:202x draft
F292 UNIQUE null treatment YES
F301 CORRESPONDING in query expressions NO
F302 INTERSECT table operator YES
F302 INTERSECT table operator 01 INTERSECT DISTINCT table operator YES
F303 INTERSECT DISTINCT table operator YES
F302 INTERSECT table operator 02 INTERSECT ALL table operator YES
F304 EXCEPT ALL table operator YES
F305 INTERSECT ALL table operator YES
F311 Schema definition statement YES
F311 Schema definition statement 01 CREATE SCHEMA YES
F311 Schema definition statement 02 CREATE TABLE for persistent base tables YES
@ -247,34 +247,34 @@ F321 User authorization YES
F341 Usage tables YES
F361 Subprogram support YES
F381 Extended schema manipulation YES
F381 Extended schema manipulation 01 ALTER TABLE statement: ALTER COLUMN clause YES
F381 Extended schema manipulation 02 ALTER TABLE statement: ADD CONSTRAINT clause YES
F381 Extended schema manipulation 03 ALTER TABLE statement: DROP CONSTRAINT clause YES
F382 Alter column data type YES
F383 Set column not null clause YES
F384 Drop identity property clause YES
F385 Drop column generation expression clause YES
F386 Set identity column generation clause YES
F387 ALTER TABLE statement: ALTER COLUMN clause YES
F388 ALTER TABLE statement: ADD/DROP CONSTRAINT clause YES
F391 Long identifiers YES
F392 Unicode escapes in identifiers YES
F393 Unicode escapes in literals YES
F394 Optional normal form specification YES
F401 Extended joined table YES
F401 Extended joined table 01 NATURAL JOIN YES
F401 Extended joined table 02 FULL OUTER JOIN YES
F401 Extended joined table 04 CROSS JOIN YES
F402 Named column joins for LOBs, arrays, and multisets YES
F403 Partitioned join tables NO
F404 Range variable for common column names YES
F405 NATURAL JOIN YES
F406 FULL OUTER JOIN YES
F407 CROSS JOIN YES
F411 Time zone specification YES differences regarding literal interpretation
F421 National character YES
F431 Read-only scrollable cursors YES
F431 Read-only scrollable cursors 01 FETCH with explicit NEXT YES
F431 Read-only scrollable cursors 02 FETCH FIRST YES
F431 Read-only scrollable cursors 03 FETCH LAST YES
F431 Read-only scrollable cursors 04 FETCH PRIOR YES
F431 Read-only scrollable cursors 05 FETCH ABSOLUTE YES
F431 Read-only scrollable cursors 06 FETCH RELATIVE YES
F432 FETCH with explicit NEXT YES
F433 FETCH FIRST YES
F434 FETCH LAST YES
F435 FETCH PRIOR YES
F436 FETCH ABSOLUTE YES
F437 FETCH RELATIVE YES
F438 Scrollable cursors YES
F441 Extended set function support YES
F442 Mixed column references in set functions YES
F451 Character set definition NO
@ -298,7 +298,7 @@ F641 Row and table constructors YES
F651 Catalog name qualifiers YES
F661 Simple tables YES
F671 Subqueries in CHECK constraints NO intentionally omitted
F672 Retrospective check constraints YES
F672 Retrospective CHECK constraints YES
F673 Reads SQL-data routine invocations in CHECK constraints NO
F690 Collation support YES but no character set support
F692 Extended collation support YES
@ -322,8 +322,8 @@ F812 Basic flagging NO
F813 Extended flagging NO
F821 Local table references NO
F831 Full cursor update NO
F831 Full cursor update 01 Updatable scrollable cursors NO
F831 Full cursor update 02 Updatable ordered cursors NO
F832 Updatable scrollable cursors NO
F833 Updatable ordered cursors NO
F841 LIKE_REGEX predicate NO consider regexp_like()
F842 OCCURRENCES_REGEX function NO consider regexp_matches()
F843 POSITION_REGEX function NO consider regexp_instr()
@ -339,7 +339,7 @@ F856 Nested <fetch first clause> in <query expression> YES
F857 Top-level <fetch first clause> in <query expression> YES
F858 <fetch first clause> in subqueries YES
F859 Top-level <fetch first clause> in views YES
F860 <fetch first row count> in <fetch first clause> YES
F860 Dynamic FETCH FIRST row count YES
F861 Top-level <result offset clause> in <query expression> YES
F862 <result offset clause> in subqueries YES
F863 Nested <result offset clause> in <query expression> YES
@ -347,6 +347,7 @@ F864 Top-level <result offset clause> in views YES
F865 <offset row count> in <result offset clause> YES
F866 FETCH FIRST clause: PERCENT option NO
F867 FETCH FIRST clause: WITH TIES option YES
F868 ORDER BY in grouped table YES
R010 Row pattern recognition: FROM clause NO
R020 Row pattern recognition: WINDOW clause NO
R030 Row pattern recognition: full aggregate support NO
@ -363,24 +364,24 @@ S043 Enhanced reference types NO
S051 Create table of type NO partially supported
S071 SQL paths in function and type name resolution YES
S081 Subtables NO
S090 Minimal array support YES
S091 Basic array support NO partially supported
S091 Basic array support 01 Arrays of built-in data types YES
S091 Basic array support 02 Arrays of distinct types NO
S091 Basic array support 03 Array expressions YES
S092 Arrays of user-defined types YES
S093 Arrays of distinct types NO
S094 Arrays of reference types NO
S095 Array constructors by query YES
S096 Optional array bounds YES
S097 Array element assignment NO
S098 ARRAY_AGG YES
S099 Array expressions YES
S111 ONLY in query expressions YES
S151 Type predicate NO see pg_typeof()
S161 Subtype treatment NO
S162 Subtype treatment for references NO
S201 SQL-invoked routines on arrays YES
S201 SQL-invoked routines on arrays 01 Array parameters YES
S201 SQL-invoked routines on arrays 02 Array as result type of functions YES
S202 SQL-invoked routines on multisets NO
S203 Array parameters YES
S204 Array as result type of functions YES
S211 User-defined cast functions YES
S231 Structured type locators NO
S232 Array locators NO
@ -406,27 +407,34 @@ T022 Advanced support for BINARY and VARBINARY data types NO
T023 Compound binary literals NO
T024 Spaces in binary literals NO
T031 BOOLEAN data type YES
T039 CLOB locator: non-holdable NO
T040 Concatenation of CLOBs NO
T041 Basic LOB data type support NO
T041 Basic LOB data type support 01 BLOB data type NO
T041 Basic LOB data type support 02 CLOB data type NO
T041 Basic LOB data type support 03 POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING functions for LOB data types NO
T041 Basic LOB data type support 04 Concatenation of LOB data types NO
T041 Basic LOB data type support 05 LOB locator: non-holdable NO
T042 Extended LOB data type support NO
T043 Multiplier T NO
T044 Multiplier P NO
T045 BLOB data type NO
T046 CLOB data type NO
T047 POSITION, OCTET_LENGTH, TRIM, and SUBSTRING for BLOBs NO
T048 Concatenation of BLOBs NO
T049 BLOB locator: non-holdable NO
T050 POSITION, CHAR_LENGTH, OCTET_LENGTH, LOWER, TRIM, UPPER, and SUBSTRING CLOBs NO
T051 Row types NO
T053 Explicit aliases for all-fields reference NO
T054 GREATEST and LEAST YES different null handling
T055 String padding functions YES
T056 Multi-character TRIM functions YES
T061 UCS support NO
T071 BIGINT data type YES
T076 DECFLOAT data type NO
T081 Optional string types maximum length YES
T101 Enhanced nullability determination NO
T111 Updatable joins, unions, and columns NO
T121 WITH (excluding RECURSIVE) in query expression YES
T122 WITH (excluding RECURSIVE) in subquery YES
T131 Recursive query YES
T132 Recursive query in subquery YES
T133 Enhanced cycle mark values YES SQL:202x draft
T133 Enhanced cycle mark values YES
T141 SIMILAR predicate YES
T151 DISTINCT predicate YES
T152 DISTINCT predicate with negation YES
@ -441,22 +449,21 @@ T178 Identity columns: simple restart option YES
T180 System-versioned tables NO
T181 Application-time period tables NO
T191 Referential action RESTRICT YES
T200 Trigger DDL NO similar but not fully compatible
T201 Comparable data types for referential constraints YES
T211 Basic trigger capability NO
T211 Basic trigger capability 01 Triggers activated on UPDATE, INSERT, or DELETE of one base table YES
T211 Basic trigger capability 02 BEFORE triggers YES
T211 Basic trigger capability 03 AFTER triggers YES
T211 Basic trigger capability 04 FOR EACH ROW triggers YES
T211 Basic trigger capability 05 Ability to specify a search condition that must be true before the trigger is invoked YES
T211 Basic trigger capability 06 Support for run-time rules for the interaction of triggers and constraints NO
T211 Basic trigger capability 07 TRIGGER privilege YES
T211 Basic trigger capability 08 Multiple triggers for the same event are executed in the order in which they were created in the catalog NO intentionally omitted
T212 Enhanced trigger capability YES
T213 INSTEAD OF triggers YES
T214 BEFORE triggers YES
T215 AFTER triggers YES
T216 Ability to require true search condition before trigger is invoked YES
T217 TRIGGER privilege YES
T218 Multiple triggers for the same event executed in the order created NO intentionally omitted
T231 Sensitive cursors NO
T241 START TRANSACTION statement YES
T251 SET TRANSACTION statement: LOCAL option NO
T261 Chained transactions YES
T262 Multiple server transactions NO
T271 Savepoints YES
T272 Enhanced savepoint management NO
T281 SELECT privilege with column granularity YES
@ -520,7 +527,8 @@ T622 Trigonometric functions YES
T623 General logarithm functions YES
T624 Common logarithm functions YES
T625 LISTAGG NO
T626 ANY_VALUE YES SQL:202x draft
T626 ANY_VALUE YES
T627 Window framed COUNT DISTINCT YES
T631 IN predicate with one list element YES
T641 Multiple column assignment NO only some syntax variants supported
T651 SQL-schema statements in SQL routines YES
@ -528,8 +536,12 @@ T652 SQL-dynamic statements in SQL routines NO
T653 SQL-schema statements in external routines YES
T654 SQL-dynamic statements in external routines NO
T655 Cyclically dependent routines YES
T661 Non-decimal integer literals YES SQL:202x draft
T662 Underscores in integer literals YES SQL:202x draft
T661 Non-decimal integer literals YES
T662 Underscores in numeric literals YES
T670 Schema and data statement mixing YES
T801 JSON data type NO
T802 Enhanced JSON data type NO
T803 String-based JSON NO
T811 Basic SQL/JSON constructor functions NO
T812 SQL/JSON: JSON_OBJECTAGG NO
T813 SQL/JSON: JSON_ARRAYAGG with ORDER BY NO
@ -553,7 +565,31 @@ T836 SQL/JSON path language: starts with predicate YES
T837 SQL/JSON path language: regex_like predicate YES
T838 JSON_TABLE: PLAN DEFAULT clause NO
T839 Formatted cast of datetimes to/from character strings NO
T840 Hex integer literals in SQL/JSON path language YES SQL:202x draft
T840 Hex integer literals in SQL/JSON path language YES
T851 SQL/JSON: optional keywords for default syntax NO
T860 SQL/JSON simplified accessor: column reference only NO
T861 SQL/JSON simplified accessor: case-sensitive JSON member accessor NO
T862 SQL/JSON simplified accessor: wildcard member accessor NO
T863 SQL/JSON simplified accessor: single-quoted string literal as member accessor NO
T864 SQL/JSON simplified accessor NO
T865 SQL/JSON item method: bigint() NO
T866 SQL/JSON item method: boolean() NO
T867 SQL/JSON item method: date() NO
T868 SQL/JSON item method: decimal() NO
T869 SQL/JSON item method: decimal() with precision and scale NO
T870 SQL/JSON item method: integer() NO
T871 SQL/JSON item method: number() NO
T872 SQL/JSON item method: string() NO
T873 SQL/JSON item method: time() NO
T874 SQL/JSON item method: time_tz() NO
T875 SQL/JSON item method: time precision NO
T876 SQL/JSON item method: timestamp() NO
T877 SQL/JSON item method: timestamp_tz() NO
T878 SQL/JSON item method: timestamp precision NO
T879 JSON in equality operations NO
T880 JSON in grouping operations NO
T881 JSON in ordering operations NO
T882 JSON in multiset element grouping operations NO
M001 Datalinks NO
M002 Datalinks via SQL/CLI NO
M003 Datalinks via Embedded SQL NO

View File

@ -57,6 +57,6 @@
*/
/* yyyymmddN */
#define CATALOG_VERSION_NO 202304042
#define CATALOG_VERSION_NO 202304051
#endif