この節では、PostgreSQL がどの程度 SQL 標準に 準拠しているかについて、概要を説明します。 SQL 標準への完全な準拠、 もしくは SQL 標準への準拠に関する完全な説明を行うと内容が複雑になり、 特に有益ではないため、この節では概要のみを説明します。
SQL 標準の公式な名称は、ISO/IEC 9075 "Database Language SQL" です。 この SQL 標準の改訂バージョンは不定期にリリースされています。 最新バージョンは 1999 年に発表されました。最新バージョンは ISO/IEC 9075:1999、もしくは非公式に SQL99 と呼ばれています。 SQL99 の 一つ前のバージョンは SQL92 です。 PostgreSQL の開発では、伝統的な機能もしくは 共通の考えと矛盾しないように、SQL 標準の最新の公式バージョンに準拠させ ようとしています。これを書いた時点では、SQL 標準の新しい改訂版についての 討論はまだ進行中です。改訂版が承認されれば、今後の PostgreSQL 開発において準拠すべき対象となる でしょう。
SQL92 では、適合性について 3 つの機能セット (Entry、Intermediate、および Full)を定義していました。 SQL 標準への準拠をうたっている多くのデータベース製品 では Entry レベルでしか適合していません。Intermediate もしくは Full レベルの機能の全体的なセットは、非常に大量になりすぎるか、もしくは旧来の 動作と競合するからです。
SQL99 では、SQL92 で使用されていた 不必要に広範囲な 3 つのレベルの代わりに、個々の機能の大規模なセットを定義 しています。これらの機能の大規模なサブセットは"核"となる機能 を表し、準拠する SQL のすべてが備える必要のある機能です。残りの機能は全く オプションです。オプション機能の中には、SQL 実装が準拠していることを宣言 できる"パッケージ"としてグループ化されるものもあります。 つまり特定の機能のグループへの準拠が可能です。
また、SQL99 標準は、5 つの部分に分かれています。 フレームワーク、ファンデーション、コールレベルインターフェイス、 永続格納モジュール、およびホスト言語バインディングです。 PostgreSQL では、フレームワーク、 ファンデーション、およびホスト言語バインディングのみをカバーして います。コールレベルインターフェイスは ODBC インターフェイスと似 ており、永続格納モジュールは PL/pgSQL プログラミング言語と似ています。しかし、どちらの場合も完全な準拠は 特に意図されていません。
以下の二つの節では、PostgreSQL でサポート されているこれらの機能をリストし、その後に PostgreSQL でまだサポート されていない SQL99 で定義された機能をリストしています。これら二つの リストは大変よく似ています。サポート対象であるとリストされている機能 が些細な部分で準拠していない可能性があり、サポートされていないある機能 の大部分が、実際には実装されている可能性があります。このドキュメントの 主要な部分では、動作するものとしないものについての最も正確な情報を常に 伝えます。
注意: ハイフンを含む機能コードはサブ機能です。したがって、特定のサブ機能が サポートされない場合、他のサブ機能がサポートされていてもそのメイン機能 はサポートされない機能としてリストされています。
| 識別子 | パッケージ | 説明 | コメント |
|---|---|---|---|
| B012 | Core | Embedded C | |
| B021 | Direct SQL | ||
| E011 | Core | Numeric data types | |
| E011-01 | Core | INTEGER and SMALLINT data types | |
| E011-02 | Core | REAL, DOUBLE PRECISION, and FLOAT data types | |
| E011-03 | Core | DECIMAL and NUMERIC data types | |
| E011-04 | Core | Arithmetic operators | |
| E011-05 | Core | Numeric comparison | |
| E011-06 | Core | Implicit casting among the numeric data types | |
| E021 | Core | Character data types | |
| E021-01 | Core | CHARACTER data type | |
| E021-02 | Core | CHARACTER VARYING data type | |
| E021-03 | Core | Character literals | |
| E021-04 | Core | CHARACTER_LENGTH function | |
| E021-05 | Core | OCTET_LENGTH function | |
| E021-06 | Core | SUBSTRING function | |
| E021-07 | Core | Character concatenation | |
| E021-08 | Core | UPPER and LOWER functions | |
| E021-09 | Core | TRIM function | |
| E021-10 | Core | Implicit casting among the character data types | |
| E021-11 | Core | POSITION function | |
| E021-12 | Core | Character comparison | |
| E031 | Core | Identifiers | |
| E031-01 | Core | Delimited identifiers | |
| E031-02 | Core | Lower case identifiers | |
| E031-03 | Core | Trailing underscore | |
| E051 | Core | Basic query specification | |
| E051-01 | Core | SELECT DISTINCT | |
| E051-02 | Core | GROUP BY clause | |
| E051-04 | Core | GROUP BY can contain columns not in <select list> | |
| E051-05 | Core | Select list items can be renamed | AS is required |
| E051-06 | Core | HAVING clause | |
| E051-07 | Core | Qualified * in select list | |
| E051-08 | Core | Correlation names in the FROM clause | |
| E051-09 | Core | Rename columns in the FROM clause | |
| E061 | Core | Basic predicates and search conditions | |
| E061-01 | Core | Comparison predicate | |
| E061-02 | Core | BETWEEN predicate | |
| E061-03 | Core | IN predicate with list of values | |
| E061-04 | Core | LIKE predicate | |
| E061-05 | Core | LIKE predicate ESCAPE clause | |
| E061-06 | Core | NULL predicate | |
| E061-07 | Core | Quantified comparison predicate | |
| E061-08 | Core | EXISTS predicate | |
| E061-09 | Core | Subqueries in comparison predicate | |
| E061-11 | Core | Subqueries in IN predicate | |
| E061-12 | Core | Subqueries in quantified comparison predicate | |
| E061-13 | Core | Correlated subqueries | |
| E061-14 | Core | Search condition | |
| E071 | Core | Basic query expressions | |
| E071-01 | Core | UNION DISTINCT table operator | |
| E071-02 | Core | UNION ALL table operator | |
| E071-03 | Core | EXCEPT DISTINCT table operator | |
| E071-05 | Core | Columns combined via table operators need not have exactly the same data type | |
| E071-06 | Core | Table operators in subqueries | |
| E081-01 | Core | SELECT privilege | |
| E081-02 | Core | DELETE privilege | |
| E081-03 | Core | INSERT privilege at the table level | |
| E081-04 | Core | UPDATE privilege at the table level | |
| E081-06 | Core | REFERENCES privilege at the table level | |
| E081-08 | Core | WITH GRANT OPTION | |
| E091 | Core | Set functions | |
| E091-01 | Core | AVG | |
| E091-02 | Core | COUNT | |
| E091-03 | Core | MAX | |
| E091-04 | Core | MIN | |
| E091-05 | Core | SUM | |
| E091-06 | Core | ALL quantifier | |
| E091-07 | Core | DISTINCT quantifier | |
| E101 | Core | Basic data manipulation | |
| E101-01 | Core | INSERT statement | |
| E101-03 | Core | Searched UPDATE statement | |
| E101-04 | Core | Searched DELETE statement | |
| E111 | Core | Single row SELECT statement | |
| E121-01 | Core | DECLARE CURSOR | |
| E121-02 | Core | ORDER BY columns need not be in select list | |
| E121-03 | Core | Value expressions in ORDER BY clause | |
| E121-04 | Core | OPEN statement | |
| E121-08 | Core | CLOSE statement | |
| E121-10 | Core | FETCH statement implicit NEXT | |
| E121-17 | Core | WITH HOLD cursors | |
| E131 | Core | Null value support (nulls in lieu of values) | |
| E141 | Core | Basic integrity constraints | |
| E141-01 | Core | NOT NULL constraints | |
| E141-02 | Core | UNIQUE constraints of NOT NULL columns | |
| E141-03 | Core | PRIMARY KEY constraints | |
| E141-04 | Core | Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action | |
| E141-06 | Core | CHECK constraints | |
| E141-07 | Core | Column defaults | |
| E141-08 | Core | NOT NULL inferred on PRIMARY KEY | |
| E141-10 | Core | Names in a foreign key can be specified in any order | |
| E151 | Core | Transaction support | |
| E151-01 | Core | COMMIT statement | |
| E151-02 | Core | ROLLBACK statement | |
| E152 | Core | Basic SET TRANSACTION statement | |
| E152-01 | Core | SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause | |
| E152-02 | Core | SET TRANSACTION statement: READ ONLY and READ WRITE clauses | |
| E161 | Core | SQL comments using leading double minus | |
| E171 | Core | SQLSTATE support | |
| F021 | Core | Basic information schema | |
| F021-01 | Core | COLUMNS view | |
| F021-02 | Core | TABLES view | |
| F021-03 | Core | VIEWS view | |
| F021-04 | Core | TABLE_CONSTRAINTS view | |
| F021-05 | Core | REFERENTIAL_CONSTRAINTS view | |
| F021-06 | Core | CHECK_CONSTRAINTS view | |
| F031 | Core | Basic schema manipulation | |
| F031-01 | Core | CREATE TABLE statement to create persistent base tables | |
| F031-02 | Core | CREATE VIEW statement | |
| F031-03 | Core | GRANT statement | |
| F031-04 | Core | ALTER TABLE statement: ADD COLUMN clause | |
| F031-13 | Core | DROP TABLE statement: RESTRICT clause | |
| F031-16 | Core | DROP VIEW statement: RESTRICT clause | |
| F031-19 | Core | REVOKE statement: RESTRICT clause | |
| F032 | CASCADE drop behavior | ||
| F033 | ALTER TABLE statement: DROP COLUMN clause | ||
| 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 | ||
| F041 | Core | Basic joined table | |
| F041-01 | Core | Inner join (but not necessarily the INNER keyword) | |
| F041-02 | Core | INNER keyword | |
| F041-03 | Core | LEFT OUTER JOIN | |
| F041-04 | Core | RIGHT OUTER JOIN | |
| F041-05 | Core | Outer joins can be nested | |
| F041-07 | Core | The inner table in a left or right outer join can also be used in an inner join | |
| F041-08 | Core | All comparison operators are supported (rather than just =) | |
| F051 | Core | Basic date and time | |
| F051-01 | Core | DATE data type (including support of DATE literal) | |
| F051-02 | Core | TIME data type (including support of TIME literal) with fractional seconds precision of at least 0 | |
| F051-03 | Core | TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 | |
| F051-04 | Core | Comparison predicate on DATE, TIME, and TIMESTAMP data types | |
| F051-05 | Core | Explicit CAST between datetime types and character types | |
| F051-06 | Core | CURRENT_DATE | |
| F051-07 | Core | LOCALTIME | |
| F051-08 | Core | LOCALTIMESTAMP | |
| F052 | Enhanced datetime facilities | Intervals and datetime arithmetic | |
| F081 | Core | UNION and EXCEPT in views | |
| F111-02 | READ COMMITTED isolation level | ||
| F131 | Core | Grouped operations | |
| F131-01 | Core | WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views | |
| F131-02 | Core | Multiple tables supported in queries with grouped views | |
| F131-03 | Core | Set functions supported in queries with grouped views | |
| F131-04 | Core | Subqueries with GROUP BY and HAVING clauses and grouped views | |
| F131-05 | Core | Single row SELECT with GROUP BY and HAVING clauses and grouped views | |
| F171 | Multiple schemas per user | ||
| F191 | Enhanced integrity management | Referential delete actions | |
| F201 | Core | CAST function | |
| F221 | Core | Explicit defaults | |
| F222 | INSERT statement: DEFAULT VALUES clause | ||
| F231 | Privilege Tables | ||
| F231-01 | TABLE_PRIVILEGES view | ||
| F231-02 | COLUMN_PRIVILEGES view | ||
| F231-03 | USAGE_PRIVILEGES view | ||
| F251 | Domain support | ||
| F261 | Core | CASE expression | |
| F261-01 | Core | Simple CASE | |
| F261-02 | Core | Searched CASE | |
| F261-03 | Core | NULLIF | |
| F261-04 | Core | COALESCE | |
| F271 | Compound character literals | ||
| F281 | LIKE enhancements | ||
| F302 | OLAP facilities | INTERSECT table operator | |
| F302-01 | OLAP facilities | INTERSECT DISTINCT table operator | |
| F302-02 | OLAP facilities | INTERSECT ALL table operator | |
| F304 | OLAP facilities | EXCEPT ALL table operator | |
| F311-01 | Core | CREATE SCHEMA | |
| F311-02 | Core | CREATE TABLE for persistent base tables | |
| F311-03 | Core | CREATE VIEW | |
| F311-05 | Core | GRANT statement | |
| F321 | User authorization | ||
| F361 | Subprogram support | ||
| F381 | Extended schema manipulation | ||
| 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 | OLAP facilities | Extended joined table | |
| F401-01 | OLAP facilities | NATURAL JOIN | |
| F401-02 | OLAP facilities | FULL OUTER JOIN | |
| F401-03 | OLAP facilities | UNION JOIN | |
| F401-04 | OLAP facilities | CROSS JOIN | |
| F411 | Enhanced datetime facilities | Time zone specification | |
| F421 | National character | ||
| 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 | ||
| F441 | Extended set function support | ||
| F471 | Core | Scalar subquery values | |
| F481 | Core | Expanded NULL predicate | |
| F491 | Enhanced integrity management | Constraint management | |
| F501 | Core | Features and conformance views | |
| F501-01 | Core | SQL_FEATURES view | |
| F501-02 | Core | SQL_SIZING view | |
| F501-03 | Core | SQL_LANGUAGES view | |
| F502 | Enhanced documentation tables | ||
| F502-01 | SQL_SIZING_PROFILES view | ||
| F502-02 | SQL_IMPLEMENTATION_INFO view | ||
| F502-03 | SQL_PACKAGES view | ||
| F511 | BIT data type | ||
| F531 | Temporary tables | ||
| F555 | Enhanced datetime facilities | Enhanced seconds precision | |
| F561 | Full value expressions | ||
| F571 | Truth value tests | ||
| F591 | OLAP facilities | Derived tables | |
| F611 | Indicator data types | ||
| F651 | Catalog name qualifiers | ||
| F701 | Enhanced integrity management | Referential update actions | |
| F711 | ALTER domain | ||
| F761 | Session management | ||
| F771 | Connection management | ||
| F781 | Self-referencing operations | ||
| F791 | Insensitive cursors | ||
| F801 | Full set function | ||
| S071 | Enhanced object support | SQL paths in function and type name resolution | |
| S111 | Enhanced object support | ONLY in query expressions | |
| S211 | Enhanced object support, SQL/MM support | User-defined cast functions | |
| T031 | BOOLEAN data type | ||
| T141 | SIMILAR predicate | ||
| T151 | DISTINCT predicate | ||
| T171 | LIKE clause in table definition | ||
| T191 | Enhanced integrity management | Referential action RESTRICT | |
| T201 | Enhanced integrity management | Comparable data types for referential constraints | |
| T211-01 | Enhanced integrity management, Active database | Triggers activated on UPDATE, INSERT, or DELETE of one base table | |
| T211-02 | Enhanced integrity management, Active database | BEFORE triggers | |
| T211-03 | Enhanced integrity management, Active database | AFTER triggers | |
| T211-04 | Enhanced integrity management, Active database | FOR EACH ROW triggers | |
| T211-07 | Enhanced integrity management, Active database | TRIGGER privilege | |
| T212 | Enhanced integrity management | Enhanced trigger capability | |
| T231 | SENSITIVE cursors | ||
| T241 | START TRANSACTION statement | ||
| T312 | OVERLAY function | ||
| T321-01 | Core | User-defined functions with no overloading | |
| T321-03 | Core | Function invocation | |
| T321-06 | Core | ROUTINES view | |
| T321-07 | Core | PARAMETERS view | |
| T322 | PSM, SQL/MM support | Overloading of SQL-invoked functions and procedures | |
| T323 | Explicit security for external routines | ||
| T351 | Bracketed SQL comments (/*...*/ comments) | ||
| T441 | ABS and MOD functions | ||
| T501 | Enhanced EXISTS predicate | ||
| T551 | Optional key words for default syntax | ||
| T581 | Regular expression substring function | ||
| T591 | UNIQUE constraints of possibly null columns |