> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cockroachlabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SQL Feature Support in CockroachDB v24.2

Making CockroachDB easy to use is a top priority for us, so we chose to implement SQL. However, even though SQL has a standard, no database implements all of it, nor do any of them have standard implementations of all features.

To understand which standard SQL features we support (as well as common extensions to the standard), use the table below.

* **Component** lists the components that are commonly considered part of SQL.
* **Supported** shows CockroachDB's level of support for the component.
* **Type** indicates whether the component is part of the SQL *Standard* or is an *Extension* created by ourselves or others.
* **Details** provides greater context about the component.

## Features

### Row values

| Component | Supported | Type | Details |
| - | - | - | - |
| `ARRAY` | ✓ | Standard | [`ARRAY` documentation](/docs/stable/array) |
| `AUTO INCREMENT` (Automatic key generation) | Alternative | Common Extension | [Automatic key generation FAQ](/docs/stable/sql-faqs.md#how-do-i-auto-generate-unique-row-ids-in-cockroachdb) |
| `BIT` | ✓ | Standard | [`BIT` documentation](/docs/stable/bit) |
| `BOOLEAN` | ✓ | Standard | [`BOOL` documentation](/docs/stable/bool) |
| `BYTES` | ✓ | CockroachDB Extension | [`BYTES` documentation](/docs/stable/bytes) |
| `COLLATE` | ✓ | Standard | [`COLLATE` documentation](/docs/stable/collate) |
| `DATE` | ✓ | Standard | [`DATE` documentation](/docs/stable/date) |
| `DECIMAL`, `NUMERIC` | ✓ | Standard | [`DECIMAL` documentation](/docs/stable/decimal) |
| `ENUM` | ✓ | PostgreSQL Extension | [`ENUM` documentation](/docs/stable/enum) |
| `FLOAT`, `REAL` | ✓ | Standard | [`FLOAT` documentation](/docs/stable/float) |
| `INET` | ✓ | PostgreSQL Extension | [`INET` documentation](/docs/stable/inet) |
| `INT` | ✓ | Standard | [`INT` documentation](/docs/stable/int) |
| `INTERVAL` | ✓ | Standard | [`INTERVAL` documentation](/docs/stable/interval) |
| `JSON`/`JSONB` | ✓ | Common Extension | [`JSONB` documentation](/docs/stable/jsonb) |
| `NULL` | ✓ | Standard | [`NULL`-handling documentation](/docs/stable/null-handling) |
| `OID` | ✓ | PostgreSQL Extension | [`OID` documentation](/docs/stable/oid) |
| `SERIAL` | ✓ | PostgreSQL Extension | [`SERIAL` documentation](/docs/stable/serial) |
| `SET` | ✗ | MySQL | Only allow rows to contain values from a defined set of terms. |
| `STRING`, `CHARACTER` | ✓ | Standard | [`STRING` documentation](/docs/stable/string) |
| `TIME` | ✓ | Standard | [`TIME` documentation](/docs/stable/time) |
| `TIMESTAMP`/`TIMESTAMPTZ` | ✓ | Standard | [`TIMESTAMP` documentation](/docs/stable/timestamp) |
| `TSQUERY` | ✓ | Standard | [`TSQUERY` documentation](/docs/stable/tsquery) |
| `TSVECTOR` | ✓ | Standard | [`TSVECTOR` documentation](/docs/stable/tsvector) |
| `UNSIGNED INT` | ✗ | Common Extension | `UNSIGNED INT` causes numerous casting issues, so we do not plan to support it. |
| `UUID` | ✓ | PostgreSQL Extension | [`UUID` documentation](/docs/stable/uuid) |
| Identifiers | ✓ | Standard | [Identifiers documentation](/docs/stable/keywords-and-identifiers.md#identifiers).  See also [SQL Name Resolution](/docs/stable/sql-name-resolution.md). |
| Key-value pairs | Alternative | Extension | [Key-Value FAQ](/docs/stable/sql-faqs.md#can-i-use-cockroachdb-as-a-key-value-store) |
| XML | ✗ | Standard | XML data can be stored as `BYTES`, but we do not offer XML parsing. |

### Constraints

| Component | Supported | Type | Details |
| - | - | - | - |
| Not Null | ✓ | Standard | [Not Null documentation](/docs/stable/not-null.md) |
| Unique | ✓ | Standard | [Unique documentation](/docs/stable/unique.md) |
| Primary Key | ✓ | Standard | [Primary Key documentation](/docs/stable/primary-key.md) |
| Check | ✓ | Standard | [Check documentation](/docs/stable/check.md) |
| Foreign Key | ✓ | Standard | [Foreign Key documentation](/docs/stable/foreign-key.md) |
| Default Value | ✓ | Standard | [Default Value documentation](/docs/stable/default-value.md) |

### Transactions

| Component | Supported | Type | Details |
| - | - | - | - |
| Transactions (ACID semantics) | ✓ | Standard | [Transactions documentation](/docs/stable/transactions.md) |
| `BEGIN` | ✓ | Standard | [`BEGIN` documentation](/docs/stable/begin-transaction) |
| `COMMIT` | ✓ | Standard | [`COMMIT` documentation](/docs/stable/commit-transaction) |
| `ROLLBACK` | ✓ | Standard | [`ROLLBACK` documentation](/docs/stable/rollback-transaction) |
| `SAVEPOINT` | ✓ | Standard with CockroachDB extensions | CockroachDB supports nested transactions using [`SAVEPOINT`](/docs/stable/savepoint) |

### Indexes

| Component | Supported | Type | Details |
| - | - | - | - |
| Indexes | ✓ | Common Extension | [Indexes documentation](/docs/stable/indexes.md) |
| Multi-column indexes | ✓ | Common Extension | We do not limit on the number of columns indexes can include |
| Covering indexes | ✓ | Common Extension | [Storing Columns documentation](/docs/stable/create-index.md#store-columns) |
| GIN indexes | ✓ | Common Extension | [GIN indexes documentation](/docs/stable/inverted-indexes.md) |
| Trigram indexes | ✓ | PostgreSQL Extension | [Trigram indexes documentation](/docs/stable/trigram-indexes.md) |
| Partial indexes | ✓ | Common Extension | [Partial indexes documentation](/docs/stable/partial-indexes.md) |
| Spatial indexes | ✓ | Common Extension | [Spatial indexes documentation](/docs/stable/spatial-indexes.md) |
| Multiple indexes per query | Partial | Common Extension | [Index selection](/docs/stable/indexes.md#selection) |
| Full-text indexes | ✓ | Common Extension | [Full-text search documentation](/docs/stable/full-text-search.md) |
| Expression indexes | ✓ | Common Extension | [Expression indexes](/docs/stable/expression-indexes.md) |
| Prefix indexes | ✗ | Common Extension | Implement using [Expression indexes](/docs/stable/expression-indexes.md) |
| Hash indexes | ✗ | Common Extension | Improves performance of queries looking for single, exact values |
| Hash-sharded indexes | ✓ | CockroachDB Extension | [Hash-sharded Indexes documentation](/docs/stable/hash-sharded-indexes.md) |

### Schema changes

| Component | Supported | Type | Details |
| - | - | - | - |
| `ALTER TABLE` | ✓ | Standard | [`ALTER TABLE` documentation](/docs/stable/alter-table) |
| Database renames | ✓ | Standard | [`ALTER DATABASE ... RENAME TO` documentation](/docs/stable/alter-database#rename-to) |
| Table renames | ✓ | Standard | [`ALTER TABLE ... RENAME TO` documentation](/docs/stable/alter-table#rename-to) |
| Column renames | ✓ | Standard | [`RENAME COLUMN` documentation](/docs/stable/alter-table#rename-column) |
| Altering a column's data type | ✓ | Standard | [`ALTER COLUMN` documentation](/docs/stable/alter-table#alter-column-data-types) |
| Adding columns | ✓ | Standard | [`ADD COLUMN` documentation](/docs/stable/alter-table#add-column) |
| Removing columns | ✓ | Standard | [`DROP COLUMN` documentation](/docs/stable/alter-table#drop-column) |
| Adding constraints | ✓ | Standard | [`ADD CONSTRAINT` documentation](/docs/stable/alter-table#add-constraint) |
| Removing constraints | ✓ | Standard | [`DROP CONSTRAINT` documentation](/docs/stable/alter-table#drop-constraint) |
| Index renames | ✓ | Standard | [`ALTER INDEX ... RENAME TO` documentation](/docs/stable/alter-index#rename-to) |
| Adding indexes | ✓ | Standard | [`CREATE INDEX` documentation](/docs/stable/create-index) |
| Removing indexes | ✓ | Standard | [`DROP INDEX` documentation](/docs/stable/drop-index) |
| Altering a primary key | ✓ | Standard | [`ALTER PRIMARY KEY` documentation](/docs/stable/alter-table#alter-primary-key) |
| Adding user-defined schemas | ✓ | Standard | [`CREATE SCHEMA` documentation](/docs/stable/create-schema) |
| Removing user-defined schemas | ✓ | Standard | [`DROP SCHEMA` documentation](/docs/stable/drop-schema) |
| Altering user-defined schemas | ✓ | Standard | [`ALTER SCHEMA` documentation](/docs/stable/create-schema) |

### Statements

| Component | Supported | Type | Details |
| - | - | - | - |
| Common statements | ✓ | Standard, PostgreSQL/CockroachDB Extension | [SQL Statements documentation](/docs/stable/sql-statements.md) |
| `UPSERT` | ✓ | PostgreSQL, MSSQL Extension | [`UPSERT` documentation](/docs/stable/upsert) |
| `EXPLAIN` | ✓ | Common Extension | [`EXPLAIN` documentation](/docs/stable/explain) |
| `SELECT ... INTO` | ✓ | Common Extension | [PL/pgSQL documentation](/docs/stable/plpgsql.md#declare-a-variable). |
| `SELECT FOR UPDATE` | ✓ | Common Extension | [`SELECT FOR UPDATE` documentation](/docs/stable/select-for-update) |

### Clauses

| Component | Supported | Type | Details |
| - | - | - | - |
| Common clauses | ✓ | Standard | [SQL Grammar documentation](/docs/stable/sql-grammar.md) |
| `LIMIT` | ✓ | Common Extension | Limit the number of rows a statement returns. For more information, see [Limit Query Results](/docs/stable/limit-offset.md). |
| `LIMIT` with `OFFSET` | ✓ | Common Extension | Skip a number of rows, and then limit the size of the return set. For more information, see [Limit Query Results](/docs/stable/limit-offset.md). |
| `RETURNING` | ✓ | Common Extension | Retrieve a table of rows statements affect. For examples, see the [`INSERT`](/docs/stable/insert) and [`DELETE`](/docs/stable/delete) documentation. |

### Table expressions

| Component | Supported | Type | Details |
| - | - | - | - |
| Table and View references | ✓ | Standard | [Table expressions documentation](/docs/stable/table-expressions.md#table-and-view-names) |
| `AS` in table expressions | ✓ | Standard | [Aliased table expressions documentation](/docs/stable/table-expressions.md#aliased-table-expressions) |
| `JOIN` (`INNER`, `LEFT`, `RIGHT`, `FULL`, `CROSS`) | ✓ | Standard | [`JOIN` expressions documentation](/docs/stable/table-expressions#join-expressions) |
| Sub-queries as table expressions | Partial | Standard | Non-correlated subqueries are [supported](/docs/stable/table-expressions.md#use-a-subquery), as are most [correlated subqueries](/docs/stable/subqueries.md#correlated-subqueries). |
| Table generator functions | Partial | PostgreSQL Extension | [Table generator functions documentation](/docs/stable/table-expressions.md#table-generator-functions) |
| `WITH ORDINALITY` | ✓ | CockroachDB Extension | [Ordinality annotation documentation](/docs/stable/table-expressions.md#ordinality-annotation) |

### Scalar expressions and Boolean formulas

| Component | Supported | Type | Details |
| - | - | - | - |
| Common functions | ✓ | Standard | [Functions calls and SQL special forms documentation](/docs/stable/scalar-expressions.md#function-calls-and-sql-special-forms) |
| Common operators | ✓ | Standard | [Operators documentation](/docs/stable/scalar-expressions.md#unary-and-binary-operations) |
| `IF`/`CASE`/`NULLIF` | ✓ | Standard | [Conditional expressions documentation](/docs/stable/scalar-expressions.md#conditional-expressions) |
| `COALESCE`/`IFNULL` | ✓ | Standard | [Conditional expressions documentation](/docs/stable/scalar-expressions.md#conditional-expressions) |
| `AND`/`OR` | ✓ | Standard | [Conditional expressions documentation](/docs/stable/scalar-expressions.md#conditional-expressions) |
| `LIKE`/`ILIKE` | ✓ | Standard | [String pattern matching documentation](/docs/stable/scalar-expressions.md#string-pattern-matching) |
| `SIMILAR TO` | ✓ | Standard | [SQL regexp pattern matching documentation](/docs/stable/scalar-expressions.md#string-matching-using-sql-regular-expressions) |
| Matching using POSIX regular expressions | ✓ | Common Extension | [POSIX regexp pattern matching documentation](/docs/stable/scalar-expressions.md#string-matching-using-posix-regular-expressions) |
| `EXISTS` | Partial | Standard | Non-correlated subqueries are [supported](/docs/stable/scalar-expressions.md#existence-test-on-the-result-of-subqueries), as are most [correlated subqueries](/docs/stable/subqueries.md#correlated-subqueries). Works only with small data sets. |
| Scalar subqueries | Partial | Standard | Non-correlated subqueries are [supported](/docs/stable/scalar-expressions.md#scalar-subqueries), as are most [correlated subqueries](/docs/stable/subqueries.md#correlated-subqueries). Works only with small data sets. |
| Bitwise arithmetic | ✓ | Common Extension | [Operators documentation](/docs/stable/scalar-expressions.md#unary-and-binary-operations) |
| Array constructors and subscripting | Partial | PostgreSQL Extension | Array expression documentation: [Constructor syntax](/docs/stable/scalar-expressions.md#array-constructors) and [Subscripting](/docs/stable/scalar-expressions.md#subscripted-expressions) |
| `COLLATE` | ✓ | Standard | [Collation expressions documentation](/docs/stable/scalar-expressions.md#collation-expressions) |
| Column ordinal references | ✓ | CockroachDB Extension | [Column references documentation](/docs/stable/scalar-expressions.md#column-references) |
| Type annotations | ✓ | CockroachDB Extension | [Type annotations documentation](/docs/stable/scalar-expressions.md#explicitly-typed-expressions) |

### Permissions

| Component | Supported | Type | Details |
| - | - | - | - |
| Users | ✓ | Standard | [Users documentation](/docs/stable/security-reference/authorization.md#sql-users) |
| Roles | ✓ | Standard | [Roles documentation](/docs/stable/security-reference/authorization.md#roles) |
| Object ownership | ✓ | Common Extension | [Ownership documentation](/docs/stable/security-reference/authorization.md#object-ownership) |
| Privileges | ✓ | Standard | [Privileges documentation](/docs/stable/security-reference/authorization.md#managing-privileges) |
| Default privileges | ✓ | PostgreSQL Extension | [Default privileges documentation](/docs/stable/security-reference/authorization.md#default-privileges) |

### Miscellaneous

| Component | Supported | Type | Details |
| - | - | - | - |
| Column families | ✓ | CockroachDB Extension | [Column Families documentation](/docs/stable/column-families.md) |
| Computed columns (stored and virtual) | ✓ | Common Extension | [Computed Columns documentation](/docs/stable/computed-columns.md) |
| `ON UPDATE` expressions | ✓ | MySQL Extension | [`ON UPDATE` expressions documentation](/docs/stable/create-table#on-update-expressions) |
| Multi-region capabilities | ✓ | CockroachDB Extension | [Multi-region documentation](/docs/stable/multiregion-overview.md) |
| System catalog schemas | ✓ | Standard, PostgreSQL/CockroachDB Extension | [`crdb_internal`](/docs/stable/crdb-internal) (CockroachDB Extension) [`information_schema`](/docs/stable/information-schema) (Standard) [`pg_catalog`](/docs/stable/pg-catalog) (PostgreSQL Extension) [`pg_extension`](/docs/stable/pg-extension) (PostgreSQL Extension) |
| Sequences | ✓ | Common Extension | [`CREATE SEQUENCE` documentation](/docs/stable/create-sequence) |
| Identity columns | ✓ | Common Extension | [Identity columns documentation](/docs/stable/create-table.md#identity-columns) |
| Views | ✓ | Standard | [Views documentation](/docs/stable/views.md) |
| Materialized views | ✓ | Common Extension | [Materialized views documentation](/docs/stable/views.md#materialized-views) |
| Window functions | ✓ | Standard | [Window Functions documentation](/docs/stable/window-functions.md) |
| Common table expressions | Partial | Common Extension | [Common Table Expressions documentation](/docs/stable/common-table-expressions.md) |
| Stored procedures | Partial | Common Extension | [Stored procedures documentation](/docs/stable/stored-procedures.md) |
| Cursors | Partial | Standard | [Cursors documentation](/docs/stable/cursors.md) |
| Triggers | ✗ | Standard | Execute a set of commands whenever a specified event occurs. |
| Row-level TTL | ✓ | Common Extension | Automatically delete expired rows.  For more information, see [Batch-delete expired data with Row-Level TTL](/docs/stable/row-level-ttl.md). |
| User-defined functions | Partial | Standard | [User-Defined Functions documentation](/docs/stable/user-defined-functions.md) |
| `CREATE EXTENSION "uuid-ossp"` | ✓ | Common Extension | Provides access to several additional [UUID generation functions](/docs/stable/functions-and-operators.md#id-generation-functions). Note that these UUID functions are available without typing `CREATE EXTENSION "uuid-ossp"`. CockroachDB does not have full support for `CREATE EXTENSION`. |
