Esta seção procura delinear até que ponto o PostgreSQL está em conformidade com o padrão SQL corrente. As informações que se seguem não são uma declaração completa da conformidade, mas apresentam os tópicos principais em um nível de detalhe que é tanto razoável quanto útil para os usuários.
O nome formal do padrão SQL é ISO/IEC 9075 Database Language SQL. A versão revisada do padrão é liberada de tempos em tempos; a mais recente surgiu no final de 2003; Esta versão é referida como ISO/IEC 9075:2003, ou simplesmente como SQL:2003. As versões anteriores a esta foram SQL:1999 e SQL-92. Cada versão substitui a versão anterior, portanto declarar que está em conformidade com uma versão anterior não tem mérito oficial. O desenvolvimento do PostgreSQL tenta manter a conformidade com a última versão oficial do padrão, quando esta conformidade não contradiz as funcionalidades tradicionais ou o senso comum. Durante a preparação do SQL:2003 o projeto PostgreSQL não esteve representado no Grupo de Trabalho ISO/IEC 9075, mesmo assim muitas funcionalidades requeridas pelo SQL:2003 já são suportadas, emboras às vezes com uma sintaxe ligeiramente diferente ou através de uma função. Pode-se esperar movimentos em direção à conformidade nas próximas versões.
O SQL-92 definiu três conjuntos de funcionalidades para conformidade: Entrada, Intermediário e Completo. A maioria dos sistemas gerenciadores de banco de dados que se declaravam em conformidade com este padrão SQL, estavam em conformidade apenas com o nível de Entrada, porque o conjunto completo de funcionalidades nos níveis Intermediário e Completo era muito volumoso, ou conflitava com comportamentos legados.
A partir do SQL:1999, o padrão SQL passou a definir um conjunto maior de funcionalidades individuais, em vez dos três níveis grandes e ineficazes presentes no SQL-92. Um subconjunto grande destas funcionalidades representa as funcionalidades "núcleo" (core), que toda implementação em conformidade com o padrão SQL deve atender. As demais funcionalidades são inteiramente opcionais. Algumas funcionalidades opcionais são agrupadas para formarem "pacotes", com os quais as implementações SQL podem se declarar em conformidade, portanto se declarando em conformidade com um determinado grupo de funcionalidades.
O padrão SQL:2003 também está dividido em partes. Cada uma destas partes é conhecia por um nome abreviado. Deve ser observado que estas partes não são numeradas seqüencialmente.
ISO/IEC 9075-1 Framework (SQL/Framework)
ISO/IEC 9075-2 Foundation (SQL/Foundation)
ISO/IEC 9075-3 Call Level Interface (SQL/CLI)
ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9 Management of External Data (SQL/MED)
ISO/IEC 9075-10 Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT)
ISO/IEC 9075-14 XML-related specifications (SQL/XML)
O PostgreSQL cobre as partes 1, 2 e 11. A parte 3 é semelhante à interface ODBC, e a parte 4 é semelhante à linguagem de programação PL/pgSQL, mas nestes casos não se busca ou verifica especificamente a conformidade exata.
O PostgreSQL suporta a maioria das funcionalidades principais do padrão SQL:2003. Das 164 funcionalidades requeridas para a conformidade total com o núcleo, o PostgreSQL está em conformidade com pelo menos 150. Além disso, existe uma longa lista de funcionalidades opcionais suportadas. Vale a pena notar que no momento em que esta documentação foi escrita nenhum sistema de gerenciamento de banco de dados se declarava em conformidade total com o núcleo do SQL:2003.
Nas seções que se seguem, é fornecida uma lista das funcionalidades que o PostgreSQL suporta, seguida por uma lista das funcionalidades definidas pelo SQL:2003 que o PostgreSQL ainda não suporta. As duas listas são aproximadas: podem existir pequenos detalhes que não estão em conformidade em uma funcionalidade declarada como suportada, enquanto grande parte de uma funcionalidade não suportada pode, na verdade, estar implementada. O corpo principal da documentação sempre contém informações mais precisas sobre o que funciona e o que não funciona.
Nota: Os códigos de funcionalidade contendo hífen são subfuncionalidades. Portanto, se uma determinada subfuncionalidade não for suportada, a funcionalidade principal é declarada como não suportada, mesmo que outras subfuncionalidades sejam suportadas.
Identificador | Pacote | Descrição | Comentário |
---|---|---|---|
B012 | 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 | trims trailing spaces from CHARACTER values before counting |
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 string 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 | |
E081-10 | Core | EXECUTE privilege | |
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 string types | |
F051-06 | Core | CURRENT_DATE | |
F051-07 | Core | LOCALTIME | |
F051-08 | Core | LOCALTIMESTAMP | |
F052 | Enhanced datetime facilities | Intervals and datetime arithmetic | |
F053 | OVERLAPS predicate | ||
F081 | Core | UNION and EXCEPT in views | |
F111 | Isolation levels other than SERIALIZABLE | ||
F111-01 | READ UNCOMMITTED isolation level | ||
F111-02 | READ COMMITTED isolation level | ||
F111-03 | REPEATABLE READ 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 | INTERSECT table operator | ||
F302-01 | INTERSECT DISTINCT table operator | ||
F302-02 | INTERSECT ALL table operator | ||
F304 | 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 | Extended joined table | ||
F401-01 | NATURAL JOIN | ||
F401-02 | FULL OUTER JOIN | ||
F401-04 | CROSS JOIN | ||
F411 | Enhanced datetime facilities | Time zone specification | differences regarding literal interpretation |
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 | ||
F531 | Temporary tables | ||
F555 | Enhanced datetime facilities | Enhanced seconds precision | |
F561 | Full value expressions | ||
F571 | Truth value tests | ||
F591 | Derived tables | ||
F611 | Indicator data types | ||
F651 | Catalog name qualifiers | ||
F672 | Retrospective check constraints | ||
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 | User-defined cast functions | |
T031 | BOOLEAN data type | ||
T071 | BIGINT 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 | Active database, Enhanced integrity management | Triggers activated on UPDATE, INSERT, or DELETE of one base table | |
T211-02 | Active database, Enhanced integrity management | BEFORE triggers | |
T211-03 | Active database, Enhanced integrity management | AFTER triggers | |
T211-04 | Active database, Enhanced integrity management | FOR EACH ROW triggers | |
T211-07 | Active database, Enhanced integrity management | TRIGGER privilege | |
T212 | Enhanced integrity management | Enhanced trigger capability | |
T231 | Sensitive cursors | ||
T241 | START TRANSACTION statement | ||
T271 | Savepoints | ||
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 | 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 |