<!--
$Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.15 2003/01/14 23:19:34 petere Exp $
-->

<appendix id="features">
 <title>SQL Conformance</title>

 <para>
  This section attempts to outline to what extent
  <productname>PostgreSQL</productname> conforms to the SQL standard.
  Full compliance to the standard or a complete statement about the
  compliance to the standard is complicated and not particularly
  useful, so this section can only give an overview.
  </para>

 <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 one appearing in 1999.  That
  version is refered to as ISO/IEC 9075:1999, or informally as SQL99.
  The version prior to that was SQL92.
  <productname>PostgreSQL</productname> development tends to aim for
  conformance with the latest official version of the standard where
  such conformance does not contradict traditional features or common
  sense.  At the time of this writing, ballotting is under way for a
  new revision of the standard, which, if approved, will eventually
  become the conformance target for future
  <productname>PostgreSQL</productname> development.
 </para>

 <para>
  <acronym>SQL92</acronym> defined three feature sets for conformance:
  Entry, Intermediate, and Full. Most database products claiming
  <acronym>SQL</acronym> standard conformance were conforming at only
  the Entry level, since the entire set of features in the
  Intermediate and Full levels was either too voluminous or in
  conflict with legacy behaviors.
 </para>

 <para>
  <acronym>SQL99</acronym> defines a large set of individual features
  rather than the ineffectively broad three levels found in
  <acronym>SQL92</acronym>.  A large subset of these features
  represents the <quote>core</quote> features, which every conforming
  SQL implementation must supply.  The rest of the features are purely
  optional.  Some optional features are grouped together to form
  <quote>packages</quote>, which SQL implementations can claim
  conformance to, thus claiming conformance to particular groups of
  features.
 </para>

 <para>
  The <acronym>SQL99</acronym> standard is also split into 5 parts:
  Framework, Foundation, Call Level Interface, Persistent Stored
  Modules, and Host Language Bindings.
  <productname>PostgreSQL</productname> only covers parts 1, 2, and 5.
  Part 3 is similar to the ODBC interface, and part 4 is similar to
  the <application>PL/pgSQL</application> programming language, but
  exact conformance is not specifically intended in either case.
 </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 SQL99 which are not yet supported in
  PostgreSQL.  Both of these lists are approximate: There may be minor
  details that are nonconforming for a feature that is listed as
  supported, and large parts of an unsupported feature may in fact be
  implemented.  The main body of the documentation always contains the
  most accurate information about what does and does not work.
 </para>

 <note>
  <para>
   Feature codes containing a hyphen are subfeatures.  Therefore, if a
   particular subfeature is not supported, the main feature is listed
   as unsupported even if some other subfeatures are supported.
  </para>
 </note>

  <sect1 id="features-sql99">
   <title>Supported Features</title>

   <para>
    <informaltable>
     <tgroup cols="4">
      <thead>
       <row>
        <entry>Identifier</entry>
        <entry>Package</entry>
        <entry>Description</entry>
        <entry>Comment</entry>
       </row>
      </thead>

      &features-supported;

     </tgroup>
    </informaltable>
   </para>
  </sect1>

  <sect1 id="unsupported-features-sql99">
   <title>Unsupported Features</title>

   <para>
    The following features defined in <acronym>SQL99</acronym> are not
    implemented in the current release of
    <productname>PostgreSQL</productname>. In a few cases, equivalent
    functionality is available.

    <informaltable>
     <tgroup cols="4">
      <thead>
       <row>
        <entry>Identifier</entry>
        <entry>Package</entry>
        <entry>Description</entry>
        <entry>Comment</entry>
       </row>
      </thead>

      &features-unsupported;

     </tgroup>
    </informaltable>
   </para>
  </sect1>

 </appendix>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->
