From a2e7ab645ab9581b078592caab84c2be810549d9 Mon Sep 17 00:00:00 2001 From: Ryan Kuo Date: Mon, 27 Oct 2025 18:10:12 -0400 Subject: [PATCH 1/6] SQL Queries v25.4 known limitations --- .../known-limitations/vector-limitations.md | 1 - .../data-domiciling-limitations.md | 5 +- .../like-escape-performance.md | 1 + .../read-committed-limitations.md | 1 + .../known-limitations/rls-visibility-issue.md | 1 - ...ary-regions-with-regional-by-row-tables.md | 4 +- .../stored-proc-limitations.md | 3 +- .../known-limitations/trigger-limitations.md | 4 ++ .../known-limitations/udf-limitations.md | 4 +- .../known-limitations/vector-limitations.md | 1 - .../known-limitations/view-limitations.md | 1 + src/current/v25.4/known-limitations.md | 48 ++++++++++++------- src/current/v25.4/row-level-security.md | 6 --- src/current/v25.4/views.md | 4 ++ 14 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 src/current/_includes/v25.4/known-limitations/like-escape-performance.md delete mode 100644 src/current/_includes/v25.4/known-limitations/rls-visibility-issue.md create mode 100644 src/current/_includes/v25.4/known-limitations/view-limitations.md diff --git a/src/current/_includes/v25.3/known-limitations/vector-limitations.md b/src/current/_includes/v25.3/known-limitations/vector-limitations.md index cd05410f4a2..97ed7c47599 100644 --- a/src/current/_includes/v25.3/known-limitations/vector-limitations.md +++ b/src/current/_includes/v25.3/known-limitations/vector-limitations.md @@ -1,5 +1,4 @@ - {% include {{ page.version.version }}/sql/vector-batch-inserts.md %} -- Creating a vector index through a backfill disables mutations ([`INSERT`]({% link {{ page.version.version }}/insert.md %}), [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}), [`UPDATE`]({% link {{ page.version.version }}/update.md %}), [`DELETE`]({% link {{ page.version.version }}/delete.md %})) on the table. [#144443](https://github.com/cockroachdb/cockroach/issues/144443) - `IMPORT INTO` is not supported on tables with vector indexes. You can import the vectors first and create the index after import is complete. [#145227](https://github.com/cockroachdb/cockroach/issues/145227) - The distance functions `vector_l1_ops`, `bit_hamming_ops`, and `bit_jaccard_ops` are not implemented. [#147839](https://github.com/cockroachdb/cockroach/issues/147839) - Index acceleration with filters is only supported if the filters match prefix columns. [#146145](https://github.com/cockroachdb/cockroach/issues/146145) diff --git a/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md b/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md index 509a9c9599f..515f8fd3f77 100644 --- a/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md @@ -1,4 +1,7 @@ - When columns are [indexed]({% link {{ page.version.version }}/indexes.md %}), a subset of data from the indexed columns may appear in [meta ranges]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#meta-ranges) or other system tables. CockroachDB synchronizes these system ranges and system tables across nodes. This synchronization does not respect any multi-region settings applied via either the [multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}), or the low-level [zone configs]({% link {{ page.version.version }}/configure-replication-zones.md %}) mechanism. - [Zone configs]({% link {{ page.version.version }}/configure-replication-zones.md %}) can be used for data placement but these features were historically built for performance, not for domiciling. The replication system's top priority is to prevent the loss of data and it may override the zone configurations if necessary to ensure data durability. For more information, see [Replication Controls]({% link {{ page.version.version }}/configure-replication-zones.md %}#types-of-constraints). - If your [log files]({% link {{ page.version.version }}/logging-overview.md %}) are kept in the region where they were generated, there is some cross-region leakage (like the system tables described previously), but the majority of user data that makes it into the logs is going to be homed in that region. If that's not strong enough, you can use the [log redaction functionality]({% link {{ page.version.version }}/configure-logs.md %}#redact-logs) to strip all raw data from the logs. You can also limit your log retention entirely. -- If you start a node with a [`--locality`]({% link {{ page.version.version }}/cockroach-start.md %}#locality) flag that says the node is in region _A_, but the node is actually running in some region _B_, data domiciling based on the inferred node placement will not work. A CockroachDB node only knows its locality based on the text supplied to the `--locality` flag; it can not ensure that it is actually running in that physical location. \ No newline at end of file +- If you start a node with a [`--locality`]({% link {{ page.version.version }}/cockroach-start.md %}#locality) flag that says the node is in region _A_, but the node is actually running in some region _B_, data domiciling based on the inferred node placement will not work. A CockroachDB node only knows its locality based on the text supplied to the `--locality` flag; it can not ensure that it is actually running in that physical location. +- When using the `infer_rbr_region_col_using_constraint` option, inserting rows with `DEFAULT` for the region column uses the database's primary region instead of inferring the region from the parent table via foreign-key constraint. [#150783](https://github.com/cockroachdb/cockroach/issues/150783) +- {% include {{page.version.version}}/known-limitations/secondary-regions-with-regional-by-row-tables.md %} +- {% include {{ page.version.version }}/known-limitations/enforce-home-region-limitations.md %} \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/like-escape-performance.md b/src/current/_includes/v25.4/known-limitations/like-escape-performance.md new file mode 100644 index 00000000000..845fdddeeb9 --- /dev/null +++ b/src/current/_includes/v25.4/known-limitations/like-escape-performance.md @@ -0,0 +1 @@ +`LIKE` queries with an `ESCAPE` clause cannot use index acceleration, which can result in significantly slower performance compared to standard `LIKE` queries. [#30192](https://github.com/cockroachdb/cockroach/issues/30192) diff --git a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md index 63f83b15dd8..c3374249d9e 100644 --- a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md @@ -2,5 +2,6 @@ - Multi-column-family checks during updates are not supported under `READ COMMITTED` isolation. [#112488](https://github.com/cockroachdb/cockroach/issues/112488) - Because locks acquired by [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks, [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}), and [`SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) are fully replicated under `READ COMMITTED` isolation, some queries experience a delay for Raft replication. - [Foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks are not performed in parallel under `READ COMMITTED` isolation. +- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663) - [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements are less optimized under `READ COMMITTED` isolation than under `SERIALIZABLE` isolation. Under `READ COMMITTED` isolation, `SELECT FOR UPDATE` and `SELECT FOR SHARE` usually perform an extra lookup join for every locked table when compared to the same queries under `SERIALIZABLE`. In addition, some optimization steps (such as de-correlation of correlated [subqueries]({% link {{ page.version.version }}/subqueries.md %})) are not currently performed on these queries. - Regardless of isolation level, [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements in CockroachDB do not prevent insertion of new rows matching the search condition (i.e., [phantom reads]({% link {{ page.version.version }}/read-committed.md %}#non-repeatable-reads-and-phantom-reads)). This matches PostgreSQL behavior at all isolation levels. [#120673](https://github.com/cockroachdb/cockroach/issues/120673) \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/rls-visibility-issue.md b/src/current/_includes/v25.4/known-limitations/rls-visibility-issue.md deleted file mode 100644 index 453059825a3..00000000000 --- a/src/current/_includes/v25.4/known-limitations/rls-visibility-issue.md +++ /dev/null @@ -1 +0,0 @@ -Under certain conditions, such as when executing certain SQL functions, CockroachDB's row-level security (RLS) implementation exposes metadata about the number of restricted rows in a table. For example, when a user applies arbitrary SQL filters on a table with RLS enabled, it's possible for the user to see how many total rows are in the table; this count includes rows that the user does not have direct access to. This metadata leakage can also occur when statements like [`EXPLAIN ANALYZE`]({% link {{ page.version.version }}/explain.md %}) are used, as the output includes a count of the number of rows scanned by the query that can include the number of restricted rows, even though the rows themselves are not directly accessible. [#146952](https://github.com/cockroachdb/cockroach/issues/146952) diff --git a/src/current/_includes/v25.4/known-limitations/secondary-regions-with-regional-by-row-tables.md b/src/current/_includes/v25.4/known-limitations/secondary-regions-with-regional-by-row-tables.md index 721bf6f1339..f7f99035f7a 100644 --- a/src/current/_includes/v25.4/known-limitations/secondary-regions-with-regional-by-row-tables.md +++ b/src/current/_includes/v25.4/known-limitations/secondary-regions-with-regional-by-row-tables.md @@ -1,3 +1 @@ -[Secondary regions]({% link {{ page.version.version }}/multiregion-overview.md %}#secondary-regions) are not compatible with databases containing [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables. CockroachDB does not prevent you from defining secondary regions on databases with regional by row tables, but the interaction of these features is not supported. - -Therefore, Cockroach Labs recommends that you avoid defining secondary regions on databases that use regional by row table configurations. +[Secondary regions]({% link {{ page.version.version }}/multiregion-overview.md %}#secondary-regions) are not compatible with databases containing [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) tables. CockroachDB does not prevent you from defining secondary regions on databases with regional by row tables, but the interaction of these features is not supported. Therefore, Cockroach Labs recommends that you avoid defining secondary regions on databases that use regional by row table configurations. diff --git a/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md b/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md index b2ba1b61562..135a067fe58 100644 --- a/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md @@ -1,3 +1,4 @@ {% if page.name != "known-limitations.md" # New limitations in v24.2 %} {% endif %} -- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266) \ No newline at end of file +- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266) +- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529) \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/trigger-limitations.md b/src/current/_includes/v25.4/known-limitations/trigger-limitations.md index fb1c4685480..ecb2e677094 100644 --- a/src/current/_includes/v25.4/known-limitations/trigger-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/trigger-limitations.md @@ -1,3 +1,7 @@ - A [trigger function]({% link {{ page.version.version }}/triggers.md %}#trigger-function) that is used in an existing trigger cannot be replaced with `CREATE OR REPLACE` syntax. To use `CREATE OR REPLACE`, first [drop any triggers]({% link {{ page.version.version }}/drop-trigger.md %}) that are using the function. [#134555](https://github.com/cockroachdb/cockroach/issues/134555) - Hidden columns are not visible to triggers. [#133331](https://github.com/cockroachdb/cockroach/issues/133331) +- The `REFERENCING` clause for `CREATE TRIGGER` is not supported. [#135655](https://github.com/cockroachdb/cockroach/issues/135655) +- CockroachDB uses one-based indexing for the `TG_ARGV` array to maintain consistency with its array indexing system. This differs from PostgreSQL, where `TG_ARGV` uses zero-based indexing, unlike other PostgreSQL arrays. Trigger functions that reference `TG_ARGV` need to be adjusted when migrating from PostgreSQL. [#135311](https://github.com/cockroachdb/cockroach/issues/135311) +- `UPDATE` triggers with a column list (using `UPDATE OF column_name` syntax) are not supported. [#135656](https://github.com/cockroachdb/cockroach/issues/135656) +- Statement-level triggers for `TRUNCATE` events are not supported. [#135657](https://github.com/cockroachdb/cockroach/issues/135657) - {% include {{ page.version.version }}/known-limitations/drop-trigger-limitations.md %} \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/udf-limitations.md b/src/current/_includes/v25.4/known-limitations/udf-limitations.md index cd749ced7e4..4478a1ff04b 100644 --- a/src/current/_includes/v25.4/known-limitations/udf-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/udf-limitations.md @@ -3,6 +3,8 @@ - A `RECORD`-returning UDF cannot be created without a `RETURN` statement in the root block, which would restrict the wildcard type to a concrete one. [#122945](https://github.com/cockroachdb/cockroach/issues/122945) - User-defined functions are not currently supported in: - Expressions (column, index, constraint) in tables. [#87699](https://github.com/cockroachdb/cockroach/issues/87699) + - Partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) - User-defined functions cannot call themselves recursively. [#93049](https://github.com/cockroachdb/cockroach/issues/93049) - The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860) -- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184) \ No newline at end of file +- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184) +- Views cannot reference a UDF that contains mutation statements (`INSERT`, `UPDATE`, `UPSERT`, `DELETE`). [#151686](https://github.com/cockroachdb/cockroach/issues/151686) \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/vector-limitations.md b/src/current/_includes/v25.4/known-limitations/vector-limitations.md index cd05410f4a2..97ed7c47599 100644 --- a/src/current/_includes/v25.4/known-limitations/vector-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/vector-limitations.md @@ -1,5 +1,4 @@ - {% include {{ page.version.version }}/sql/vector-batch-inserts.md %} -- Creating a vector index through a backfill disables mutations ([`INSERT`]({% link {{ page.version.version }}/insert.md %}), [`UPSERT`]({% link {{ page.version.version }}/upsert.md %}), [`UPDATE`]({% link {{ page.version.version }}/update.md %}), [`DELETE`]({% link {{ page.version.version }}/delete.md %})) on the table. [#144443](https://github.com/cockroachdb/cockroach/issues/144443) - `IMPORT INTO` is not supported on tables with vector indexes. You can import the vectors first and create the index after import is complete. [#145227](https://github.com/cockroachdb/cockroach/issues/145227) - The distance functions `vector_l1_ops`, `bit_hamming_ops`, and `bit_jaccard_ops` are not implemented. [#147839](https://github.com/cockroachdb/cockroach/issues/147839) - Index acceleration with filters is only supported if the filters match prefix columns. [#146145](https://github.com/cockroachdb/cockroach/issues/146145) diff --git a/src/current/_includes/v25.4/known-limitations/view-limitations.md b/src/current/_includes/v25.4/known-limitations/view-limitations.md new file mode 100644 index 00000000000..f03af1d3930 --- /dev/null +++ b/src/current/_includes/v25.4/known-limitations/view-limitations.md @@ -0,0 +1 @@ +- The `security_invoker` attribute for views is not supported. Views always use the view definer's privileges when checking permissions. [#138918](https://github.com/cockroachdb/cockroach/issues/138918) diff --git a/src/current/v25.4/known-limitations.md b/src/current/v25.4/known-limitations.md index ddc193ed9e9..580d9244bbe 100644 --- a/src/current/v25.4/known-limitations.md +++ b/src/current/v25.4/known-limitations.md @@ -1,5 +1,5 @@ --- -title: Known Limitations in CockroachDB v25.3 +title: Known Limitations in CockroachDB v25.4 summary: Learn about newly identified limitations in CockroachDB as well as unresolved limitations identified in earlier releases. toc: true keywords: limitations, known limitations, unsupported features, PostgreSQL compatibility @@ -12,25 +12,26 @@ docs_area: releases This section describes newly identified limitations in CockroachDB {{ page.version.version }}. -### Row-level security filtering +### View support -{% include {{ page.version.version }}/known-limitations/rls-update-set-where-returning.md %} +{% include {{ page.version.version }}/known-limitations/view-limitations.md %} -### DistSQL +### User-defined functions -{% include {{ page.version.version }}/known-limitations/distsql-heterogeneous-endianness.md %} +- User-defined functions are not currently supported in partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) +- Views cannot reference a UDF that contains mutation statements (`INSERT`, `UPDATE`, `UPSERT`, `DELETE`). [#151686](https://github.com/cockroachdb/cockroach/issues/151686) -### Multi-region +### Stored procedures -{% include {{ page.version.version }}/known-limitations/enforce-home-region-limitations.md %} +- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529) -### Geospatial +### Mixed-isolation workloads -{% include {{ page.version.version }}/known-limitations/geospatial-heterogeneous-architectures.md %} +- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663) -### `CITEXT` +### Data domiciling -{% include {{ page.version.version }}/known-limitations/citext-limitations.md %} +- When using the `infer_rbr_region_col_using_constraint` option, inserting rows with `DEFAULT` for the region column uses the database's primary region instead of inferring the region from the parent table via foreign-key constraint. [#150783](https://github.com/cockroachdb/cockroach/issues/150783) ## Limitations from {{ previous_version }} and earlier @@ -113,6 +114,10 @@ pq: unsupported binary operator: || [#10679](https://github.com/cockroachdb/cockroach/issues/10679) +#### `LIKE` with `ESCAPE` performance + +{% include {{ page.version.version }}/known-limitations/like-escape-performance.md %} + #### Current sequence value not checked when updating min/max value Altering the minimum or maximum value of a series does not check the current value of a series. This means that it is possible to silently set the maximum to a value less than, or a minimum value greater than, the current value. [#23719](https://github.com/cockroachdb/cockroach/issues/23719) @@ -318,11 +323,11 @@ CockroachDB does not allow inverted indexes with a [`STORING` column]({% link {{ {% include {{ page.version.version }}/known-limitations/expression-index-limitations.md %} -#### Secondary regions and regional by row tables +### Data types -{% include {{page.version.version}}/known-limitations/secondary-regions-with-regional-by-row-tables.md %} +#### `CITEXT` limitations -### Data types +{% include {{ page.version.version }}/known-limitations/citext-limitations.md %} #### Spatial support limitations @@ -344,6 +349,8 @@ CockroachDB supports efficiently storing and querying [spatial data]({% link {{ - {% include {{ page.version.version }}/known-limitations/srid-4326-limitations.md %} +- {% include {{ page.version.version }}/known-limitations/geospatial-heterogeneous-architectures.md %} + #### `OID` limitations Refer to [`OID` best practices]({% link {{ page.version.version }}/oid.md %}#best-practices). @@ -370,9 +377,8 @@ Refer to [`OID` best practices]({% link {{ page.version.version }}/oid.md %}#bes #### Row-level security -{% include {{ page.version.version }}/known-limitations/rls-values-on-conflict-do-nothing.md %} - -{% include {{ page.version.version }}/known-limitations/rls-visibility-issue.md %} +- {% include {{ page.version.version }}/known-limitations/rls-values-on-conflict-do-nothing.md %} +- {% include {{ page.version.version }}/known-limitations/rls-update-set-where-returning.md %} #### `GRANT`/`REVOKE` limitations @@ -396,6 +402,10 @@ Every [`DELETE`]({% link {{ page.version.version }}/delete.md %}) or [`UPDATE`]( {% include {{ page.version.version }}/known-limitations/data-domiciling-limitations.md %} +#### DistSQL + +{% include {{ page.version.version }}/known-limitations/distsql-heterogeneous-endianness.md %} + #### CockroachDB does not test for all connection failure scenarios CockroachDB servers rely on the network to report when a TCP connection fails. In most scenarios when a connection fails, the network immediately reports a connection failure, resulting in a `Connection refused` error. @@ -732,3 +742,7 @@ UNION ALL SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2. #### Inverted join for `tsvector` and `tsquery` types is not supported CockroachDB cannot index-accelerate queries with `@@` predicates when both sides of the operator are variables. [#102731](https://github.com/cockroachdb/cockroach/issues/102731) + +#### `LIKE` operator with `ESCAPE` clause + +{% include {{ page.version.version }}/known-limitations/like-escape-performance.md %} \ No newline at end of file diff --git a/src/current/v25.4/row-level-security.md b/src/current/v25.4/row-level-security.md index ba9545566b0..e904769da63 100644 --- a/src/current/v25.4/row-level-security.md +++ b/src/current/v25.4/row-level-security.md @@ -528,12 +528,6 @@ For a demo showing how to combine row-level security with [Multi-region SQL]({% {% include_cached youtube.html video_id="ZG8RsfwMaa8" %} -## Known limitations - -### Row-level security metadata leakage - -{% include {{ page.version.version }}/known-limitations/rls-visibility-issue.md %} - ## See also + [`SHOW POLICIES`]({% link {{ page.version.version }}/show-policies.md %}) diff --git a/src/current/v25.4/views.md b/src/current/v25.4/views.md index 1b703728bcf..af7c538c340 100644 --- a/src/current/v25.4/views.md +++ b/src/current/v25.4/views.md @@ -684,6 +684,10 @@ For example: (3 rows) ~~~ +## Known limitations + +{% include {{ page.version.version }}/known-limitations/view-limitations.md %} + ## See also - [Selection Queries]({% link {{ page.version.version }}/selection-queries.md %}) From b4b5ce9c0a83f18078ba0f32dce46df1fc894436 Mon Sep 17 00:00:00 2001 From: Ryan Kuo Date: Thu, 30 Oct 2025 14:11:41 -0400 Subject: [PATCH 2/6] update link to KL issue --- .../v25.4/known-limitations/read-committed-limitations.md | 2 +- src/current/v25.4/known-limitations.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md index c3374249d9e..cc695ccfc32 100644 --- a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md @@ -2,6 +2,6 @@ - Multi-column-family checks during updates are not supported under `READ COMMITTED` isolation. [#112488](https://github.com/cockroachdb/cockroach/issues/112488) - Because locks acquired by [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks, [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}), and [`SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) are fully replicated under `READ COMMITTED` isolation, some queries experience a delay for Raft replication. - [Foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks are not performed in parallel under `READ COMMITTED` isolation. -- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663) +- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663#issuecomment-3222083180) - [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements are less optimized under `READ COMMITTED` isolation than under `SERIALIZABLE` isolation. Under `READ COMMITTED` isolation, `SELECT FOR UPDATE` and `SELECT FOR SHARE` usually perform an extra lookup join for every locked table when compared to the same queries under `SERIALIZABLE`. In addition, some optimization steps (such as de-correlation of correlated [subqueries]({% link {{ page.version.version }}/subqueries.md %})) are not currently performed on these queries. - Regardless of isolation level, [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements in CockroachDB do not prevent insertion of new rows matching the search condition (i.e., [phantom reads]({% link {{ page.version.version }}/read-committed.md %}#non-repeatable-reads-and-phantom-reads)). This matches PostgreSQL behavior at all isolation levels. [#120673](https://github.com/cockroachdb/cockroach/issues/120673) \ No newline at end of file diff --git a/src/current/v25.4/known-limitations.md b/src/current/v25.4/known-limitations.md index 580d9244bbe..f335a086be7 100644 --- a/src/current/v25.4/known-limitations.md +++ b/src/current/v25.4/known-limitations.md @@ -27,7 +27,7 @@ This section describes newly identified limitations in CockroachDB {{ page.versi ### Mixed-isolation workloads -- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663) +- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663#issuecomment-3222083180) ### Data domiciling From f6ec4a9a72f0bd0467b80264941fe6fe3d27df94 Mon Sep 17 00:00:00 2001 From: Ryan Kuo Date: Thu, 30 Oct 2025 17:11:40 -0400 Subject: [PATCH 3/6] add new LTREE limitations --- .../_includes/v25.4/known-limitations/ltree-limitations.md | 2 ++ src/current/v25.4/known-limitations.md | 4 ++++ 2 files changed, 6 insertions(+) create mode 100644 src/current/_includes/v25.4/known-limitations/ltree-limitations.md diff --git a/src/current/_includes/v25.4/known-limitations/ltree-limitations.md b/src/current/_includes/v25.4/known-limitations/ltree-limitations.md new file mode 100644 index 00000000000..d8e54fa6462 --- /dev/null +++ b/src/current/_includes/v25.4/known-limitations/ltree-limitations.md @@ -0,0 +1,2 @@ +- The `ltree2text` function produces incorrect results by wrapping the output in single quotes. For example, `ltree2text('foo.bar.baz'::LTREE)` returns `'foo.bar.baz'` instead of `foo.bar.baz`. [#156479](https://github.com/cockroachdb/cockroach/issues/156479) +- The `LTREE` `<@` operator produces incorrect results when using an index. The optimizer creates an incorrect index constraint span for `LTREE` `<@` queries. [#156478](https://github.com/cockroachdb/cockroach/issues/156478) diff --git a/src/current/v25.4/known-limitations.md b/src/current/v25.4/known-limitations.md index f335a086be7..d62d8343f1f 100644 --- a/src/current/v25.4/known-limitations.md +++ b/src/current/v25.4/known-limitations.md @@ -33,6 +33,10 @@ This section describes newly identified limitations in CockroachDB {{ page.versi - When using the `infer_rbr_region_col_using_constraint` option, inserting rows with `DEFAULT` for the region column uses the database's primary region instead of inferring the region from the parent table via foreign-key constraint. [#150783](https://github.com/cockroachdb/cockroach/issues/150783) +### `LTREE` data type + +{% include {{ page.version.version }}/known-limitations/ltree-limitations.md %} + ## Limitations from {{ previous_version }} and earlier This section describes limitations from previous CockroachDB versions that still impact {{ page.version.version }}. From e198b567f4b3c352980b11b183bd170d860035af Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 31 Oct 2025 12:41:42 -0400 Subject: [PATCH 4/6] remove duplicate KL sections for Views --- src/current/v25.4/views.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/current/v25.4/views.md b/src/current/v25.4/views.md index af7c538c340..88d8310926b 100644 --- a/src/current/v25.4/views.md +++ b/src/current/v25.4/views.md @@ -623,12 +623,6 @@ To speed up queries on materialized views, you can add an [index]({% link {{ pag (7 rows) ~~~ -### Known limitations - -{% include {{page.version.version}}/known-limitations/materialized-views-no-stats.md %} - -{% include {{page.version.version}}/known-limitations/cannot-refresh-materialized-views-inside-transactions.md %} - ## Temporary views CockroachDB supports session-scoped temporary views. Unlike persistent views, temporary views can only be accessed from the session in which they were created, and they are dropped at the end of the session. You can create temporary views on both persistent tables and [temporary tables]({% link {{ page.version.version }}/temporary-tables.md %}). @@ -688,6 +682,10 @@ For example: {% include {{ page.version.version }}/known-limitations/view-limitations.md %} +{% include {{page.version.version}}/known-limitations/materialized-views-no-stats.md %} + +{% include {{page.version.version}}/known-limitations/cannot-refresh-materialized-views-inside-transactions.md %} + ## See also - [Selection Queries]({% link {{ page.version.version }}/selection-queries.md %}) From ec37cae4523f58338591ff41843286413c274759 Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 31 Oct 2025 15:26:30 -0400 Subject: [PATCH 5/6] deduplicate KLs --- .../v25.4/known-limitations/data-domiciling-limitations.md | 4 +++- .../v25.4/known-limitations/read-committed-limitations.md | 4 +++- .../v25.4/known-limitations/stored-proc-limitations.md | 6 +++--- .../_includes/v25.4/known-limitations/udf-limitations.md | 7 ++++--- src/current/v25.4/known-limitations.md | 2 +- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md b/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md index 515f8fd3f77..44834d0001b 100644 --- a/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/data-domiciling-limitations.md @@ -1,7 +1,9 @@ +{% if page.name != "known-limitations.md" # New limitations in v25.4 %} +- When using the `infer_rbr_region_col_using_constraint` option, inserting rows with `DEFAULT` for the region column uses the database's primary region instead of inferring the region from the parent table via foreign-key constraint. [#150783](https://github.com/cockroachdb/cockroach/issues/150783) +{% endif %} - When columns are [indexed]({% link {{ page.version.version }}/indexes.md %}), a subset of data from the indexed columns may appear in [meta ranges]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#meta-ranges) or other system tables. CockroachDB synchronizes these system ranges and system tables across nodes. This synchronization does not respect any multi-region settings applied via either the [multi-region SQL statements]({% link {{ page.version.version }}/multiregion-overview.md %}), or the low-level [zone configs]({% link {{ page.version.version }}/configure-replication-zones.md %}) mechanism. - [Zone configs]({% link {{ page.version.version }}/configure-replication-zones.md %}) can be used for data placement but these features were historically built for performance, not for domiciling. The replication system's top priority is to prevent the loss of data and it may override the zone configurations if necessary to ensure data durability. For more information, see [Replication Controls]({% link {{ page.version.version }}/configure-replication-zones.md %}#types-of-constraints). - If your [log files]({% link {{ page.version.version }}/logging-overview.md %}) are kept in the region where they were generated, there is some cross-region leakage (like the system tables described previously), but the majority of user data that makes it into the logs is going to be homed in that region. If that's not strong enough, you can use the [log redaction functionality]({% link {{ page.version.version }}/configure-logs.md %}#redact-logs) to strip all raw data from the logs. You can also limit your log retention entirely. - If you start a node with a [`--locality`]({% link {{ page.version.version }}/cockroach-start.md %}#locality) flag that says the node is in region _A_, but the node is actually running in some region _B_, data domiciling based on the inferred node placement will not work. A CockroachDB node only knows its locality based on the text supplied to the `--locality` flag; it can not ensure that it is actually running in that physical location. -- When using the `infer_rbr_region_col_using_constraint` option, inserting rows with `DEFAULT` for the region column uses the database's primary region instead of inferring the region from the parent table via foreign-key constraint. [#150783](https://github.com/cockroachdb/cockroach/issues/150783) - {% include {{page.version.version}}/known-limitations/secondary-regions-with-regional-by-row-tables.md %} - {% include {{ page.version.version }}/known-limitations/enforce-home-region-limitations.md %} \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md index cc695ccfc32..7bd9e27304a 100644 --- a/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/read-committed-limitations.md @@ -1,7 +1,9 @@ +{% if page.name != "known-limitations.md" # New limitations in v25.4 %} +- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663#issuecomment-3222083180) +{% endif %} - Schema changes (e.g., [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %}), [`CREATE SCHEMA`]({% link {{ page.version.version }}/create-schema.md %}), [`CREATE INDEX`]({% link {{ page.version.version }}/create-index.md %})) cannot be performed within explicit `READ COMMITTED` transactions when the [`autocommit_before_ddl` session setting]({% link {{page.version.version}}/set-vars.md %}#autocommit-before-ddl) is set to `off`, and will cause transactions to abort. As a workaround, [set the transaction's isolation level]({% link {{ page.version.version }}/read-committed.md %}#set-the-current-transaction-to-read-committed) to `SERIALIZABLE`. [#114778](https://github.com/cockroachdb/cockroach/issues/114778) - Multi-column-family checks during updates are not supported under `READ COMMITTED` isolation. [#112488](https://github.com/cockroachdb/cockroach/issues/112488) - Because locks acquired by [foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks, [`SELECT FOR UPDATE`]({% link {{ page.version.version }}/select-for-update.md %}), and [`SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) are fully replicated under `READ COMMITTED` isolation, some queries experience a delay for Raft replication. - [Foreign key]({% link {{ page.version.version }}/foreign-key.md %}) checks are not performed in parallel under `READ COMMITTED` isolation. -- Mixed-isolation-level workloads must enable foreign-key check locking for `SERIALIZABLE` transactions to avoid race conditions. [#151663](https://github.com/cockroachdb/cockroach/issues/151663#issuecomment-3222083180) - [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements are less optimized under `READ COMMITTED` isolation than under `SERIALIZABLE` isolation. Under `READ COMMITTED` isolation, `SELECT FOR UPDATE` and `SELECT FOR SHARE` usually perform an extra lookup join for every locked table when compared to the same queries under `SERIALIZABLE`. In addition, some optimization steps (such as de-correlation of correlated [subqueries]({% link {{ page.version.version }}/subqueries.md %})) are not currently performed on these queries. - Regardless of isolation level, [`SELECT FOR UPDATE` and `SELECT FOR SHARE`]({% link {{ page.version.version }}/select-for-update.md %}) statements in CockroachDB do not prevent insertion of new rows matching the search condition (i.e., [phantom reads]({% link {{ page.version.version }}/read-committed.md %}#non-repeatable-reads-and-phantom-reads)). This matches PostgreSQL behavior at all isolation levels. [#120673](https://github.com/cockroachdb/cockroach/issues/120673) \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md b/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md index 135a067fe58..14f787a9e8d 100644 --- a/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/stored-proc-limitations.md @@ -1,4 +1,4 @@ -{% if page.name != "known-limitations.md" # New limitations in v24.2 %} +{% if page.name != "known-limitations.md" # New limitations in v25.4 %} +- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529) {% endif %} -- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266) -- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529) \ No newline at end of file +- `COMMIT` and `ROLLBACK` statements are not supported within nested procedures. [#122266](https://github.com/cockroachdb/cockroach/issues/122266) \ No newline at end of file diff --git a/src/current/_includes/v25.4/known-limitations/udf-limitations.md b/src/current/_includes/v25.4/known-limitations/udf-limitations.md index 4478a1ff04b..bc5ee511e55 100644 --- a/src/current/_includes/v25.4/known-limitations/udf-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/udf-limitations.md @@ -1,4 +1,6 @@ -{% if page.name != "known-limitations.md" # New limitations in v24.2 %} +{% if page.name != "known-limitations.md" # New limitations in v25.4 %} +- User-defined functions are not supported in partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) +- Views cannot reference a UDF that contains mutation statements (`INSERT`, `UPDATE`, `UPSERT`, `DELETE`). [#151686](https://github.com/cockroachdb/cockroach/issues/151686) {% endif %} - A `RECORD`-returning UDF cannot be created without a `RETURN` statement in the root block, which would restrict the wildcard type to a concrete one. [#122945](https://github.com/cockroachdb/cockroach/issues/122945) - User-defined functions are not currently supported in: @@ -6,5 +8,4 @@ - Partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) - User-defined functions cannot call themselves recursively. [#93049](https://github.com/cockroachdb/cockroach/issues/93049) - The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860) -- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184) -- Views cannot reference a UDF that contains mutation statements (`INSERT`, `UPDATE`, `UPSERT`, `DELETE`). [#151686](https://github.com/cockroachdb/cockroach/issues/151686) \ No newline at end of file +- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184) \ No newline at end of file diff --git a/src/current/v25.4/known-limitations.md b/src/current/v25.4/known-limitations.md index d62d8343f1f..6948491e18d 100644 --- a/src/current/v25.4/known-limitations.md +++ b/src/current/v25.4/known-limitations.md @@ -18,7 +18,7 @@ This section describes newly identified limitations in CockroachDB {{ page.versi ### User-defined functions -- User-defined functions are not currently supported in partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) +- User-defined functions are not supported in partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) - Views cannot reference a UDF that contains mutation statements (`INSERT`, `UPDATE`, `UPSERT`, `DELETE`). [#151686](https://github.com/cockroachdb/cockroach/issues/151686) ### Stored procedures From f15c49a90815d2fcf35928a9c4a83963337644f5 Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 31 Oct 2025 15:48:12 -0400 Subject: [PATCH 6/6] add conditional --- .../_includes/v25.4/known-limitations/udf-limitations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/current/_includes/v25.4/known-limitations/udf-limitations.md b/src/current/_includes/v25.4/known-limitations/udf-limitations.md index bc5ee511e55..1927a5ac2be 100644 --- a/src/current/_includes/v25.4/known-limitations/udf-limitations.md +++ b/src/current/_includes/v25.4/known-limitations/udf-limitations.md @@ -5,7 +5,9 @@ - A `RECORD`-returning UDF cannot be created without a `RETURN` statement in the root block, which would restrict the wildcard type to a concrete one. [#122945](https://github.com/cockroachdb/cockroach/issues/122945) - User-defined functions are not currently supported in: - Expressions (column, index, constraint) in tables. [#87699](https://github.com/cockroachdb/cockroach/issues/87699) + {% if page.name != "known-limitations.md" # New limitations in v25.4 %} - Partial index predicates. [#155488](https://github.com/cockroachdb/cockroach/issues/155488) + {% endif %} - User-defined functions cannot call themselves recursively. [#93049](https://github.com/cockroachdb/cockroach/issues/93049) - The `setval` function cannot be resolved when used inside UDF bodies. [#110860](https://github.com/cockroachdb/cockroach/issues/110860) - Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) in UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184) \ No newline at end of file