この節では、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 |