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. than zero and cannot exceed 10485760.
<type>character</type> without length specifier is equivalent to <type>character</type> without length specifier is equivalent to
<type>character(1)</type>. If <type>character varying</type> is used <type>character(1)</type>. If <type>character varying</type> is used
without length specifier, the type accepts strings of any size. The without length specifier, the type accepts strings of any size.
latter behavior is a <productname>PostgreSQL</productname> extension.
</para> </para>
<para> <para>

View File

@ -14,9 +14,9 @@
<para> <para>
The formal name of the SQL standard is ISO/IEC 9075 <quote>Database The formal name of the SQL standard is ISO/IEC 9075 <quote>Database
Language SQL</quote>. A revised version of the standard is released Language SQL</quote>. A revised version of the standard is released
from time to time; the most recent update appearing in 2016. from time to time; the most recent update appearing in 2023.
The 2016 version is referred to as ISO/IEC 9075:2016, or simply as SQL:2016. The 2023 version is referred to as ISO/IEC 9075:2023, or simply as SQL:2023.
The versions prior to that were SQL:2011, SQL:2008, SQL:2006, SQL:2003, The versions prior to that were SQL:2016, SQL:2011, SQL:2008, SQL:2006, SQL:2003,
SQL:1999, and SQL-92. Each version SQL:1999, and SQL-92. Each version
replaces the previous one, so claims of conformance to earlier replaces the previous one, so claims of conformance to earlier
versions have no official merit. 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-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-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-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> </itemizedlist>
Note that some part numbers are not (or no longer) used. 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 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 covered by the PL/Java plug-in, but exact conformance is currently
not being verified for these components. There are currently no 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>. for <productname>PostgreSQL</productname>.
</para> </para>
<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, 177 mandatory features required for full Core conformance,
PostgreSQL conforms to at least 170. In addition, there is a long PostgreSQL conforms to at least 170. In addition, there is a long
list of supported optional features. It might be worth noting that at list of supported optional features. It might be worth noting that at
the time of writing, no current version of any database management 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>
<para> <para>
In the following two sections, we provide a list of those features In the following two sections, we provide a list of those features
that <productname>PostgreSQL</productname> supports, followed by a 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>. are not yet supported in <productname>PostgreSQL</productname>.
Both of these lists are approximate: There might be minor details that Both of these lists are approximate: There might be minor details that
are nonconforming for a feature that is listed as supported, and are nonconforming for a feature that is listed as supported, and
@ -135,7 +136,7 @@
<title>Unsupported Features</title> <title>Unsupported Features</title>
<para> <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 implemented in this release of
<productname>PostgreSQL</productname>. In a few cases, equivalent <productname>PostgreSQL</productname>. In a few cases, equivalent
functionality is available. functionality is available.

View File

@ -2452,6 +2452,26 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -2547,6 +2567,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -2650,6 +2713,49 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -2842,26 +2948,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -2999,49 +3085,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -3505,49 +3548,6 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue>
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -4138,6 +4138,46 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -4196,6 +4236,26 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -4306,26 +4366,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -4406,26 +4446,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -4444,26 +4464,6 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
</para></entry> </para></entry>
</row> </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> <row>
<entry role="func_table_entry"><para role="func_signature"> <entry role="func_table_entry"><para role="func_signature">
<indexterm> <indexterm>
@ -18354,16 +18354,14 @@ SELECT NULLIF(value, '(none)') ...
largest or smallest value from a list of any number of expressions. largest or smallest value from a list of any number of expressions.
The expressions must all be convertible to a common data type, which The expressions must all be convertible to a common data type, which
will be the type of the result will be the type of the result
(see <xref linkend="typeconv-union-case"/> for details). NULL values (see <xref linkend="typeconv-union-case"/> for details).
in the list are ignored. The result will be NULL only if all the
expressions evaluate to NULL.
</para> </para>
<para> <para>
Note that <function>GREATEST</function> and <function>LEAST</function> are not in NULL values in the argument list are ignored. The result will be NULL
the SQL standard, but are a common extension. Some other databases only if all the expressions evaluate to NULL. (This is a deviation from
make them return NULL if any argument is NULL, rather than only when the SQL standard. According to the standard, the return value is NULL if
all are NULL. any argument is NULL. Some other databases behave this way.)
</para> </para>
</sect2> </sect2>
</sect1> </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 ('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 ('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 ('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 B016 Embedded Pascal NO
B017 Embedded PL/I NO B017 Embedded PL/I NO
B021 Direct SQL YES B021 Direct SQL YES
B030 Enhanced dynamic SQL NO
B031 Basic dynamic SQL NO B031 Basic dynamic SQL NO
B032 Extended dynamic SQL NO B032 Extended dynamic SQL NO
B032 Extended dynamic SQL 01 <describe input statement> NO
B033 Untyped SQL-invoked function arguments NO B033 Untyped SQL-invoked function arguments NO
B034 Dynamic specification of cursor attributes NO B034 Dynamic specification of cursor attributes NO
B035 Non-extended descriptor names NO B035 Non-extended descriptor names NO
B036 Describe input statement NO
B041 Extensions to embedded SQL exception declarations NO B041 Extensions to embedded SQL exception declarations NO
B051 Enhanced execution rights NO B051 Enhanced execution rights NO
B111 Module language Ada NO B111 Module language Ada NO
@ -31,7 +32,7 @@ B127 Routine language PL/I NO
B128 Routine language SQL YES B128 Routine language SQL YES
B200 Polymorphic table functions NO B200 Polymorphic table functions NO
B201 More than one PTF generic table parameter 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 B203 More than one copartition specification NO
B204 PRUNE WHEN EMPTY NO B204 PRUNE WHEN EMPTY NO
B205 Pass-through columns 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 F032 CASCADE drop behavior YES
F033 ALTER TABLE statement: DROP COLUMN clause YES F033 ALTER TABLE statement: DROP COLUMN clause YES
F034 Extended REVOKE statement YES F034 Extended REVOKE statement YES
F034 Extended REVOKE statement 01 REVOKE statement performed by other than the owner of a schema object YES F035 REVOKE with CASCADE YES
F034 Extended REVOKE statement 02 REVOKE statement: GRANT OPTION FOR clause YES F036 REVOKE statement performed by non-owner YES
F034 Extended REVOKE statement 03 REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION 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 YES
F041 Basic joined table 01 Inner join (but not necessarily the INNER keyword) YES F041 Basic joined table 01 Inner join (but not necessarily the INNER keyword) YES
F041 Basic joined table 02 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 F054 TIMESTAMP in DATE type precedence list NO
F081 UNION and EXCEPT in views YES F081 UNION and EXCEPT in views YES
F111 Isolation levels other than SERIALIZABLE YES F111 Isolation levels other than SERIALIZABLE YES
F111 Isolation levels other than SERIALIZABLE 01 READ UNCOMMITTED isolation level YES F112 Isolation level READ UNCOMMITTED YES
F111 Isolation levels other than SERIALIZABLE 02 READ COMMITTED isolation level YES F113 Isolation level READ COMMITTED YES
F111 Isolation levels other than SERIALIZABLE 03 REPEATABLE READ isolation level YES F114 Isolation level REPEATABLE READ YES
F120 Get diagnostics statement NO
F121 Basic diagnostics management 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 F122 Enhanced diagnostics management NO
F123 All diagnostics NO F123 All diagnostics NO
F124 SET TRANSACTION statement: DIAGNOSTICS SIZE clause NO
F131 Grouped operations YES F131 Grouped operations YES
F131 Grouped operations 01 WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views 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 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 F221 Explicit defaults YES
F222 INSERT statement: DEFAULT VALUES clause YES F222 INSERT statement: DEFAULT VALUES clause YES
F231 Privilege tables 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 F251 Domain support YES
F261 CASE expression YES F261 CASE expression YES
F261 CASE expression 01 Simple CASE 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 F271 Compound character literals YES
F281 LIKE enhancements YES F281 LIKE enhancements YES
F291 UNIQUE predicate NO F291 UNIQUE predicate NO
F292 UNIQUE null treatment YES SQL:202x draft F292 UNIQUE null treatment YES
F301 CORRESPONDING in query expressions NO F301 CORRESPONDING in query expressions NO
F302 INTERSECT table operator YES 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 F302 INTERSECT table operator 02 INTERSECT ALL table operator YES
F304 EXCEPT 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 YES
F311 Schema definition statement 01 CREATE SCHEMA YES F311 Schema definition statement 01 CREATE SCHEMA YES
F311 Schema definition statement 02 CREATE TABLE for persistent base tables 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 F341 Usage tables YES
F361 Subprogram support YES F361 Subprogram support YES
F381 Extended schema manipulation 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 F382 Alter column data type YES
F383 Set column not null clause YES F383 Set column not null clause YES
F384 Drop identity property clause YES F384 Drop identity property clause YES
F385 Drop column generation expression clause YES F385 Drop column generation expression clause YES
F386 Set identity column generation 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 F391 Long identifiers YES
F392 Unicode escapes in identifiers YES F392 Unicode escapes in identifiers YES
F393 Unicode escapes in literals YES F393 Unicode escapes in literals YES
F394 Optional normal form specification YES F394 Optional normal form specification YES
F401 Extended joined table 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 F402 Named column joins for LOBs, arrays, and multisets YES
F403 Partitioned join tables NO F403 Partitioned join tables NO
F404 Range variable for common column names YES 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 F411 Time zone specification YES differences regarding literal interpretation
F421 National character YES F421 National character YES
F431 Read-only scrollable cursors YES F431 Read-only scrollable cursors YES
F431 Read-only scrollable cursors 01 FETCH with explicit NEXT YES F432 FETCH with explicit NEXT YES
F431 Read-only scrollable cursors 02 FETCH FIRST YES F433 FETCH FIRST YES
F431 Read-only scrollable cursors 03 FETCH LAST YES F434 FETCH LAST YES
F431 Read-only scrollable cursors 04 FETCH PRIOR YES F435 FETCH PRIOR YES
F431 Read-only scrollable cursors 05 FETCH ABSOLUTE YES F436 FETCH ABSOLUTE YES
F431 Read-only scrollable cursors 06 FETCH RELATIVE YES F437 FETCH RELATIVE YES
F438 Scrollable cursors YES
F441 Extended set function support YES F441 Extended set function support YES
F442 Mixed column references in set functions YES F442 Mixed column references in set functions YES
F451 Character set definition NO F451 Character set definition NO
@ -298,7 +298,7 @@ F641 Row and table constructors YES
F651 Catalog name qualifiers YES F651 Catalog name qualifiers YES
F661 Simple tables YES F661 Simple tables YES
F671 Subqueries in CHECK constraints NO intentionally omitted 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 F673 Reads SQL-data routine invocations in CHECK constraints NO
F690 Collation support YES but no character set support F690 Collation support YES but no character set support
F692 Extended collation support YES F692 Extended collation support YES
@ -322,8 +322,8 @@ F812 Basic flagging NO
F813 Extended flagging NO F813 Extended flagging NO
F821 Local table references NO F821 Local table references NO
F831 Full cursor update NO F831 Full cursor update NO
F831 Full cursor update 01 Updatable scrollable cursors NO F832 Updatable scrollable cursors NO
F831 Full cursor update 02 Updatable ordered cursors NO F833 Updatable ordered cursors NO
F841 LIKE_REGEX predicate NO consider regexp_like() F841 LIKE_REGEX predicate NO consider regexp_like()
F842 OCCURRENCES_REGEX function NO consider regexp_matches() F842 OCCURRENCES_REGEX function NO consider regexp_matches()
F843 POSITION_REGEX function NO consider regexp_instr() 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 F857 Top-level <fetch first clause> in <query expression> YES
F858 <fetch first clause> in subqueries YES F858 <fetch first clause> in subqueries YES
F859 Top-level <fetch first clause> in views 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 F861 Top-level <result offset clause> in <query expression> YES
F862 <result offset clause> in subqueries YES F862 <result offset clause> in subqueries YES
F863 Nested <result offset clause> in <query expression> 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 F865 <offset row count> in <result offset clause> YES
F866 FETCH FIRST clause: PERCENT option NO F866 FETCH FIRST clause: PERCENT option NO
F867 FETCH FIRST clause: WITH TIES option YES F867 FETCH FIRST clause: WITH TIES option YES
F868 ORDER BY in grouped table YES
R010 Row pattern recognition: FROM clause NO R010 Row pattern recognition: FROM clause NO
R020 Row pattern recognition: WINDOW clause NO R020 Row pattern recognition: WINDOW clause NO
R030 Row pattern recognition: full aggregate support 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 S051 Create table of type NO partially supported
S071 SQL paths in function and type name resolution YES S071 SQL paths in function and type name resolution YES
S081 Subtables NO S081 Subtables NO
S090 Minimal array support YES
S091 Basic array support NO partially supported 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 S092 Arrays of user-defined types YES
S093 Arrays of distinct types NO
S094 Arrays of reference types NO S094 Arrays of reference types NO
S095 Array constructors by query YES S095 Array constructors by query YES
S096 Optional array bounds YES S096 Optional array bounds YES
S097 Array element assignment NO S097 Array element assignment NO
S098 ARRAY_AGG YES S098 ARRAY_AGG YES
S099 Array expressions YES
S111 ONLY in query expressions YES S111 ONLY in query expressions YES
S151 Type predicate NO see pg_typeof() S151 Type predicate NO see pg_typeof()
S161 Subtype treatment NO S161 Subtype treatment NO
S162 Subtype treatment for references NO S162 Subtype treatment for references NO
S201 SQL-invoked routines on arrays YES 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 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 S211 User-defined cast functions YES
S231 Structured type locators NO S231 Structured type locators NO
S232 Array 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 T023 Compound binary literals NO
T024 Spaces in binary literals NO T024 Spaces in binary literals NO
T031 BOOLEAN data type YES 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 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 T042 Extended LOB data type support NO
T043 Multiplier T NO T043 Multiplier T NO
T044 Multiplier P 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 T051 Row types NO
T053 Explicit aliases for all-fields reference 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 T061 UCS support NO
T071 BIGINT data type YES T071 BIGINT data type YES
T076 DECFLOAT data type NO T076 DECFLOAT data type NO
T081 Optional string types maximum length YES
T101 Enhanced nullability determination NO T101 Enhanced nullability determination NO
T111 Updatable joins, unions, and columns NO T111 Updatable joins, unions, and columns NO
T121 WITH (excluding RECURSIVE) in query expression YES T121 WITH (excluding RECURSIVE) in query expression YES
T122 WITH (excluding RECURSIVE) in subquery YES T122 WITH (excluding RECURSIVE) in subquery YES
T131 Recursive query YES T131 Recursive query YES
T132 Recursive query in subquery 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 T141 SIMILAR predicate YES
T151 DISTINCT predicate YES T151 DISTINCT predicate YES
T152 DISTINCT predicate with negation YES T152 DISTINCT predicate with negation YES
@ -441,22 +449,21 @@ T178 Identity columns: simple restart option YES
T180 System-versioned tables NO T180 System-versioned tables NO
T181 Application-time period tables NO T181 Application-time period tables NO
T191 Referential action RESTRICT YES T191 Referential action RESTRICT YES
T200 Trigger DDL NO similar but not fully compatible
T201 Comparable data types for referential constraints YES T201 Comparable data types for referential constraints YES
T211 Basic trigger capability NO 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 T212 Enhanced trigger capability YES
T213 INSTEAD OF triggers 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 T231 Sensitive cursors NO
T241 START TRANSACTION statement YES T241 START TRANSACTION statement YES
T251 SET TRANSACTION statement: LOCAL option NO T251 SET TRANSACTION statement: LOCAL option NO
T261 Chained transactions YES T261 Chained transactions YES
T262 Multiple server transactions NO
T271 Savepoints YES T271 Savepoints YES
T272 Enhanced savepoint management NO T272 Enhanced savepoint management NO
T281 SELECT privilege with column granularity YES T281 SELECT privilege with column granularity YES
@ -520,7 +527,8 @@ T622 Trigonometric functions YES
T623 General logarithm functions YES T623 General logarithm functions YES
T624 Common logarithm functions YES T624 Common logarithm functions YES
T625 LISTAGG NO 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 T631 IN predicate with one list element YES
T641 Multiple column assignment NO only some syntax variants supported T641 Multiple column assignment NO only some syntax variants supported
T651 SQL-schema statements in SQL routines YES 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 T653 SQL-schema statements in external routines YES
T654 SQL-dynamic statements in external routines NO T654 SQL-dynamic statements in external routines NO
T655 Cyclically dependent routines YES T655 Cyclically dependent routines YES
T661 Non-decimal integer literals YES SQL:202x draft T661 Non-decimal integer literals YES
T662 Underscores in integer literals YES SQL:202x draft 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 T811 Basic SQL/JSON constructor functions NO
T812 SQL/JSON: JSON_OBJECTAGG NO T812 SQL/JSON: JSON_OBJECTAGG NO
T813 SQL/JSON: JSON_ARRAYAGG with ORDER BY 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 T837 SQL/JSON path language: regex_like predicate YES
T838 JSON_TABLE: PLAN DEFAULT clause NO T838 JSON_TABLE: PLAN DEFAULT clause NO
T839 Formatted cast of datetimes to/from character strings 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 M001 Datalinks NO
M002 Datalinks via SQL/CLI NO M002 Datalinks via SQL/CLI NO
M003 Datalinks via Embedded SQL NO M003 Datalinks via Embedded SQL NO

View File

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