diff --git a/src/current/_data/redirects.yml b/src/current/_data/redirects.yml
index b8fd9300a93..08176d31df1 100644
--- a/src/current/_data/redirects.yml
+++ b/src/current/_data/redirects.yml
@@ -553,6 +553,10 @@
# Removed Pages
+- destination: releases/index.md
+ sources: ['known-limitations.md']
+ versions: ['v26.1', 'v25.4']
+
- destination: licensing-faqs.md
sources: ['enterprise-licensing.md']
versions: ['v23.1', 'v23.2', 'v24.1', 'v24.2', 'v24.3']
diff --git a/src/current/_includes/releases/v25.4/v25.4.0.md b/src/current/_includes/releases/v25.4/v25.4.0.md
index b0bca745059..8c786c176f0 100644
--- a/src/current/_includes/releases/v25.4/v25.4.0.md
+++ b/src/current/_includes/releases/v25.4/v25.4.0.md
@@ -17,7 +17,6 @@ Before [upgrading to CockroachDB v25.4]({% link v25.4/upgrade-cockroach-version.
- [Features that require upgrade finalization](#v25-4-0-features-that-require-upgrade-finalization)
- [Key cluster setting changes](#v25-4-0-key-cluster-setting-changes)
- [Deprecations] (#v25-4-0-deprecations)
- - [Known limitations](#v25-4-0-known-limitations)
{% include releases/new-release-downloads-docker-image.md release=include.release %}
@@ -268,8 +267,4 @@ Before you upgrade, review these changes and other information about the new maj
Deprecations
-{% include releases/v25.4/deprecations.md %}
-
-Known limitations
-
-For information about new and unresolved limitations in CockroachDB v25.4, with suggested workarounds where applicable, refer to [Known Limitations]({% link v25.4/known-limitations.md %}).
+{% include releases/v25.4/deprecations.md %}
\ No newline at end of file
diff --git a/src/current/_includes/sidebar-all-releases.json b/src/current/_includes/sidebar-all-releases.json
index 63f50a03fb1..e7937bc8d53 100644
--- a/src/current/_includes/sidebar-all-releases.json
+++ b/src/current/_includes/sidebar-all-releases.json
@@ -34,12 +34,6 @@
"/releases/release-support-policy.html"
]
},
-{
- "title": "Known Limitations",
- "urls": [
- "/${VERSION}/known-limitations.html"
- ]
-},
{% assign advisories = site.pages | where_exp: "advisories", "advisories.path contains 'advisories'" | where_exp: "advisories", "advisories.index != 'true'" %}
{
"title": "Technical Advisories",
diff --git a/src/current/_includes/sidebar-releases.json b/src/current/_includes/sidebar-releases.json
index cc4fc3f5800..718ac222192 100644
--- a/src/current/_includes/sidebar-releases.json
+++ b/src/current/_includes/sidebar-releases.json
@@ -49,12 +49,6 @@
"urls": [
"/releases/release-support-policy.html"
]
- },
- {
- "title": "Known Limitations",
- "urls": [
- "/${VERSION}/known-limitations.html"
- ]
}
]
},
diff --git a/src/current/_includes/v25.4/known-limitations/alter-sequence-limitations.md b/src/current/_includes/v25.4/known-limitations/alter-sequence-limitations.md
new file mode 100644
index 00000000000..7343a1d1f1e
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/alter-sequence-limitations.md
@@ -0,0 +1 @@
+- 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)
diff --git a/src/current/_includes/v25.4/known-limitations/alter-table-add-column-limitations.md b/src/current/_includes/v25.4/known-limitations/alter-table-add-column-limitations.md
new file mode 100644
index 00000000000..a8e71e5e59c
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/alter-table-add-column-limitations.md
@@ -0,0 +1,10 @@
+- It is currently not possible to [add a column]({% link {{ page.version.version }}/alter-table.md %}#add-column) to a table when:
+ - The column uses a [sequence]({% link {{ page.version.version }}/create-sequence.md %}) as the [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) value, for example using `nextval()`.
+ - The column uses `GENERATED ALWAYS AS IDENTITY` or `GENERATED BY DEFAULT AS IDENTITY`, unless the table being altered is empty.
+
+ This is because CockroachDB does not support back-filling sequential column data. [#42508](https://github.com/cockroachdb/cockroach/issues/42508)
+- When executing an [`ALTER TABLE ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statement with a [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) expression, new values generated:
+ - Use the default [search path]({% link {{ page.version.version }}/sql-name-resolution.md %}#search-path) regardless of the search path configured in the current session via `SET SEARCH_PATH`.
+ - Use the UTC time zone regardless of the time zone configured in the current session via [`SET TIME ZONE`]({% link {{ page.version.version }}/set-vars.md %}).
+ - Have no default database regardless of the default database configured in the current session via [`SET DATABASE`]({% link {{ page.version.version }}/set-vars.md %}), so you must specify the database of any tables they reference.
+ - Use the transaction timestamp for the `statement_timestamp()` function regardless of the time at which the `ALTER` statement was issued.
diff --git a/src/current/_includes/v25.4/known-limitations/client-connections-limitations.md b/src/current/_includes/v25.4/known-limitations/client-connections-limitations.md
new file mode 100644
index 00000000000..bf8129a7756
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/client-connections-limitations.md
@@ -0,0 +1 @@
+- When a node has both a high number of client connections and running queries, the node may crash due to memory exhaustion. This is due to CockroachDB not accurately limiting the number of clients and queries based on the amount of available RAM on the node. To prevent memory exhaustion, monitor each node's memory usage and ensure there is some margin between maximum CockroachDB memory usage and available system RAM. For more details about memory usage in CockroachDB, see [this blog post](https://www.cockroachlabs.com/blog/memory-usage-cockroachdb/).
diff --git a/src/current/_includes/v25.4/known-limitations/collate-limitations.md b/src/current/_includes/v25.4/known-limitations/collate-limitations.md
new file mode 100644
index 00000000000..d3e3e712bb5
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/collate-limitations.md
@@ -0,0 +1 @@
+- Many string operations are not properly overloaded for [collated strings]({% link {{ page.version.version }}/collate.md %}). For example, the `||` concatenation operator works with regular strings but returns an error with collated strings. [#10679](https://github.com/cockroachdb/cockroach/issues/10679)
diff --git a/src/current/_includes/v25.4/known-limitations/column-family-limitations.md b/src/current/_includes/v25.4/known-limitations/column-family-limitations.md
new file mode 100644
index 00000000000..7359544e968
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/column-family-limitations.md
@@ -0,0 +1 @@
+- When creating or updating a row, if the combined size of all values in a single [column family]({% link {{ page.version.version }}/column-families.md %}) exceeds the [max range size]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) for the table, the operation may fail, or cluster performance may suffer. As a workaround, you can either [manually split a table's columns into multiple column families]({% link {{ page.version.version }}/column-families.md %}#manual-override), or you can [create a table-specific zone configuration]({% link {{ page.version.version }}/configure-replication-zones.md %}#create-a-replication-zone-for-a-table) with an increased max range size.
diff --git a/src/current/_includes/v25.4/known-limitations/comment-on-limitations.md b/src/current/_includes/v25.4/known-limitations/comment-on-limitations.md
new file mode 100644
index 00000000000..568b31ec737
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/comment-on-limitations.md
@@ -0,0 +1 @@
+- The [`COMMENT ON`]({% link {{ page.version.version }}/comment-on.md %}) statement associates comments to databases, tables, or columns. However, the internal table (`system.comments`) in which these comments are stored is not captured by a [`BACKUP`]({% link {{ page.version.version }}/backup.md %}) of an individual table or database. As a workaround, take a cluster backup instead, as the `system.comments` table is included in cluster backups. [#44396](https://github.com/cockroachdb/cockroach/issues/44396)
diff --git a/src/current/_includes/v25.4/known-limitations/composite-type-limitations.md b/src/current/_includes/v25.4/known-limitations/composite-type-limitations.md
new file mode 100644
index 00000000000..1ceecb5d889
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/composite-type-limitations.md
@@ -0,0 +1,2 @@
+- Updating subfields of composite types using dot syntax results in a syntax error. [#102984](https://github.com/cockroachdb/cockroach/issues/102984)
+- Tuple elements cannot be accessed without enclosing the [composite variable]({% link {{ page.version.version }}/create-type.md %}) name in parentheses. For example, `(OLD).column` and `(NEW).column` when used in [triggers]({% link {{ page.version.version }}/triggers.md %}). [#114687](https://github.com/cockroachdb/cockroach/issues/114687)
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 44834d0001b..b4e1092fdac 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,6 +1,4 @@
-{% 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.
diff --git a/src/current/_includes/v25.4/known-limitations/db-console-limitations.md b/src/current/_includes/v25.4/known-limitations/db-console-limitations.md
new file mode 100644
index 00000000000..a67bf16dba2
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/db-console-limitations.md
@@ -0,0 +1 @@
+- Accessing the DB Console for a secure cluster requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
diff --git a/src/current/_includes/v25.4/known-limitations/int-limitations.md b/src/current/_includes/v25.4/known-limitations/int-limitations.md
new file mode 100644
index 00000000000..6333dbf6ed5
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/int-limitations.md
@@ -0,0 +1 @@
+- When setting the `default_int_size` [session variable]({% link {{ page.version.version }}/set-vars.md %}) in a batch of statements such as `SET default_int_size='int4'; SELECT 1::INT`, the `default_int_size` variable will not take effect until the next statement. Statement parsing is asynchronous with statement execution. As a workaround, set `default_int_size` via your database driver, or ensure that `SET default_int_size` is in its own statement. [#32846](https://github.com/cockroachdb/cockroach/issues/32846)
diff --git a/src/current/_includes/v25.4/known-limitations/inverted-index-limitations.md b/src/current/_includes/v25.4/known-limitations/inverted-index-limitations.md
new file mode 100644
index 00000000000..1b0eb8d4335
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/inverted-index-limitations.md
@@ -0,0 +1,3 @@
+- CockroachDB does not allow inverted indexes with a [`STORING` column]({% link {{ page.version.version }}/create-index.md %}#store-columns). [#88278](https://github.com/cockroachdb/cockroach/issues/88278)
+- CockroachDB cannot index-accelerate queries with `@@` predicates when both sides of the operator are variables for `tsvector` and `tsquery` types. [#102731](https://github.com/cockroachdb/cockroach/issues/102731)
+- [Left joins]({% link {{ page.version.version }}/joins.md %}#left-outer-joins) and anti joins involving [`JSONB`]({% link {{ page.version.version }}/jsonb.md %}), [`ARRAY`]({% link {{ page.version.version }}/array.md %}), or [spatial-typed]({% link {{ page.version.version }}/export-spatial-data.md %}) columns with a multi-column or [partitioned]({% link {{ page.version.version }}/alter-index.md %}#partition-by) [GIN index](inverted-indexes.html) will not take advantage of the index if the prefix columns of the index are unconstrained, or if they are constrained to multiple, constant values. To work around this limitation, make sure that the prefix columns of the index are either constrained to single constant values, or are part of an equality condition with an input column. [#59649](https://github.com/cockroachdb/cockroach/issues/59649)
diff --git a/src/current/_includes/v25.4/known-limitations/max-row-size-limitations.md b/src/current/_includes/v25.4/known-limitations/max-row-size-limitations.md
new file mode 100644
index 00000000000..9d4d3e12918
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/max-row-size-limitations.md
@@ -0,0 +1 @@
+- The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
diff --git a/src/current/_includes/v25.4/known-limitations/node-shutdown-limitations.md b/src/current/_includes/v25.4/known-limitations/node-shutdown-limitations.md
new file mode 100644
index 00000000000..f35f858bdc1
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/node-shutdown-limitations.md
@@ -0,0 +1,5 @@
+- There is no guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if [`node decommission`]({% link {{ page.version.version }}/cockroach-node.md %}) is interrupted in one of the following ways:
+ - The `cockroach node decommission --wait-all` command was run and then interrupted
+ - The `cockroach node decommission --wait=none` command was run
+
+ This is because the state flip is effected by the CLI program at the end. Only the CLI (or its underlying API call) is able to finalize the "decommissioned" state. If the command is interrupted, or `--wait=none` is used, the state will only flip to "decommissioned" when the CLI program is run again after decommissioning has done all its work. [#94430](https://github.com/cockroachdb/cockroach/issues/94430)
diff --git a/src/current/_includes/v25.4/known-limitations/null-limitations.md b/src/current/_includes/v25.4/known-limitations/null-limitations.md
new file mode 100644
index 00000000000..ad2efce233a
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/null-limitations.md
@@ -0,0 +1 @@
+- By default, CockroachDB orders `NULL`s before all other values. For compatibility with PostgreSQL, the `null_ordered_last` [session variable]({% link {{ page.version.version }}/set-vars.md %}) was added, which changes the default to order `NULL` values after all other values. This works in most cases, due to some transformations CockroachDB makes in the optimizer to add extra ordering columns. However, it does not work when the ordering column is a tuple. [#93558](https://github.com/cockroachdb/cockroach/issues/93558)
diff --git a/src/current/_includes/v25.4/known-limitations/online-schema-changes-limitations.md b/src/current/_includes/v25.4/known-limitations/online-schema-changes-limitations.md
index 1e7b619fdf8..be6d00c26ce 100644
--- a/src/current/_includes/v25.4/known-limitations/online-schema-changes-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/online-schema-changes-limitations.md
@@ -22,4 +22,20 @@ You cannot start an online schema change on a table if a [primary key change]({%
##### No online schema changes between executions of prepared statements
-{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
\ No newline at end of file
+{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
+
+##### Column-dropping schema changes may not roll back properly
+
+Some [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) that [drop columns]({% link {{ page.version.version }}/alter-table.md %}#drop-column) cannot be [rolled back]({% link {{ page.version.version }}/rollback-transaction.md %}) properly.
+
+In some cases, the rollback will succeed, but the column data might be partially or totally missing, or stale due to the asynchronous nature of the schema change. [#46541](https://github.com/cockroachdb/cockroach/issues/46541)
+
+In other cases, the rollback will fail in such a way that will never be cleaned up properly, leaving the table descriptor in a state where no other schema changes can be run successfully. [#47712](https://github.com/cockroachdb/cockroach/issues/47712)
+
+To reduce the chance that a column drop will roll back incorrectly:
+
+- Perform column drops in transactions separate from other schema changes. This ensures that other schema change failures will not cause the column drop to be rolled back.
+- Drop all [constraints]({% link {{ page.version.version }}/constraints.md %}) (including [unique indexes]({% link {{ page.version.version }}/unique.md %})) on the column in a separate transaction, before dropping the column.
+- Drop any [default values]({% link {{ page.version.version }}/default-value.md %}) or [computed expressions]({% link {{ page.version.version }}/computed-columns.md %}) on a column before attempting to drop the column. This prevents conflicts between constraints and default/computed values during a column drop rollback.
+
+If you think a rollback of a column-dropping schema change has occurred, check the [jobs table]({% link {{ page.version.version }}/show-jobs.md %}). Schema changes with an error prefaced by `cannot be reverted, manual cleanup may be required` might require manual intervention.
\ No newline at end of file
diff --git a/src/current/_includes/v25.4/known-limitations/partition-limitations.md b/src/current/_includes/v25.4/known-limitations/partition-limitations.md
new file mode 100644
index 00000000000..f8ba5e979fa
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/partition-limitations.md
@@ -0,0 +1,3 @@
+- When defining a [table partition]({% link {{ page.version.version }}/partitioning.md %}), either during table creation or table alteration, it is not possible to use placeholders in the `PARTITION BY` clause.
+- CockroachDB does not currently support dropping a single partition from a table. In order to remove partitions, you can [repartition]({% unless page.name == "partitioning.md" %}{% link {{ page.version.version }}/partitioning.md %}{% endunless %}#repartition-a-table) the table.
+- In cases where the partition definition includes a comparison with `NULL` and a query constraint, incorrect query plans are returned. However, this case uses non-standard partitioning which defines partitions which could never hold values, so it is not likely to occur in production environments. [#82774](https://github.com/cockroachdb/cockroach/issues/82774)
diff --git a/src/current/_includes/v25.4/known-limitations/plpgsql-limitations.md b/src/current/_includes/v25.4/known-limitations/plpgsql-limitations.md
index c17954748a0..60b3104942e 100644
--- a/src/current/_includes/v25.4/known-limitations/plpgsql-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/plpgsql-limitations.md
@@ -1,5 +1,3 @@
-{% if page.name != "known-limitations.md" # New limitations in v24.2 %}
-{% endif %}
- It is not possible to use a variable as a target more than once in the same `INTO` clause. For example, `SELECT 1, 2 INTO x, x;`. [#121605](https://github.com/cockroachdb/cockroach/issues/121605)
- PLpgSQL variable declarations cannot inherit the type of a table row or column using `%TYPE` or `%ROWTYPE` syntax. [#114676](https://github.com/cockroachdb/cockroach/issues/114676)
- PL/pgSQL arguments cannot be referenced with ordinals (e.g., `$1`, `$2`). [#114701](https://github.com/cockroachdb/cockroach/issues/114701)
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 7bd9e27304a..b4722a0c369 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,6 +1,4 @@
-{% 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.
diff --git a/src/current/_includes/v25.4/known-limitations/routine-limitations.md b/src/current/_includes/v25.4/known-limitations/routine-limitations.md
index 4718c6c7abf..7c958004f70 100644
--- a/src/current/_includes/v25.4/known-limitations/routine-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/routine-limitations.md
@@ -1,5 +1,3 @@
-{% if page.name != "known-limitations.md" # New limitations in v24.2 %}
-{% endif %}
- Routines cannot be invoked with named arguments, e.g., `SELECT foo(a => 1, b => 2);` or `SELECT foo(b := 1, a := 2);`. [#122264](https://github.com/cockroachdb/cockroach/issues/122264)
- Routines cannot be created if they reference temporary tables. [#121375](https://github.com/cockroachdb/cockroach/issues/121375)
- Routines cannot be created with unnamed `INOUT` parameters. For example, `CREATE PROCEDURE p(INOUT INT) AS $$ BEGIN NULL; END; $$ LANGUAGE PLpgSQL;`. [#121251](https://github.com/cockroachdb/cockroach/issues/121251)
diff --git a/src/current/_includes/v25.4/known-limitations/savepoint-limitations.md b/src/current/_includes/v25.4/known-limitations/savepoint-limitations.md
new file mode 100644
index 00000000000..58451f4ae28
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/savepoint-limitations.md
@@ -0,0 +1 @@
+- Transactions with [priority `HIGH`]({% link {{ page.version.version }}/transactions.md %}#transaction-priorities) that contain DDL and `ROLLBACK TO SAVEPOINT` are not supported, as they could result in a deadlock. [#46414](https://github.com/cockroachdb/cockroach/issues/46414)
diff --git a/src/current/_includes/v25.4/known-limitations/select-for-update-limitations.md b/src/current/_includes/v25.4/known-limitations/select-for-update-limitations.md
index 894f1f9441a..327f9b619e1 100644
--- a/src/current/_includes/v25.4/known-limitations/select-for-update-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/select-for-update-limitations.md
@@ -1,10 +1,7 @@
-By default under `SERIALIZABLE` isolation, locks acquired using `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` are implemented as fast, in-memory [unreplicated locks](architecture/transaction-layer.html#unreplicated-locks). If a [lease transfer]({% link {{ page.version.version }}/architecture/replication-layer.md %}#leases) or [range split/merge]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-merges) occurs on a range held by an unreplicated lock, the lock is dropped. The following behaviors can occur:
+- By default under `SERIALIZABLE` isolation, locks acquired using `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` are implemented as fast, in-memory [unreplicated locks](architecture/transaction-layer.html#unreplicated-locks). If a [lease transfer]({% link {{ page.version.version }}/architecture/replication-layer.md %}#leases) or [range split/merge]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-merges) occurs on a range held by an unreplicated lock, the lock is dropped. The following behaviors can occur:
+ - The desired ordering of concurrent accesses to one or more rows of a table expressed by your use of `SELECT ... FOR UPDATE` may not be preserved (that is, a transaction _B_ against some table _T_ that was supposed to wait behind another transaction _A_ operating on _T_ may not wait for transaction _A_).
+ - The transaction that acquired the (now dropped) unreplicated lock may fail to commit, leading to [transaction retry errors with code `40001`]({% link {{ page.version.version }}/transaction-retry-error-reference.md %}) and the [`restart transaction` error message]({% link {{ page.version.version }}/common-errors.md %}#restart-transaction).
-- The desired ordering of concurrent accesses to one or more rows of a table expressed by your use of `SELECT ... FOR UPDATE` may not be preserved (that is, a transaction _B_ against some table _T_ that was supposed to wait behind another transaction _A_ operating on _T_ may not wait for transaction _A_).
-- The transaction that acquired the (now dropped) unreplicated lock may fail to commit, leading to [transaction retry errors with code `40001`]({% link {{ page.version.version }}/transaction-retry-error-reference.md %}) and the [`restart transaction` error message]({% link {{ page.version.version }}/common-errors.md %}#restart-transaction).
-
-When running under `SERIALIZABLE` isolation, `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` locks should be thought of as best-effort, and should not be relied upon for correctness. Note that [serialization]({% link {{ page.version.version }}/demo-serializable.md %}) is preserved despite this limitation. This limitation is fixed when the `enable_durable_locking_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}#enable-durable-locking-for-serializable) is set to `true`.
-
-{{site.data.alerts.callout_info}}
-This limitation does **not** apply to [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %}) transactions.
-{{site.data.alerts.end}}
\ No newline at end of file
+ When running under `SERIALIZABLE` isolation, `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` locks should be thought of as best-effort, and should not be relied upon for correctness. Note that [serialization]({% link {{ page.version.version }}/demo-serializable.md %}) is preserved despite this limitation. This limitation is fixed when the `enable_durable_locking_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}#enable-durable-locking-for-serializable) is set to `true`. This limitation does **not** apply to [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %}) transactions.
+- The new implementation of `SELECT FOR UPDATE` is not yet the default setting under `SERIALIZABLE` isolation. It can be used under `SERIALIZABLE` isolation by setting the `optimizer_use_lock_op_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}) to `true`. [#114737](https://github.com/cockroachdb/cockroachdb/issues/114737)
+- `SELECT FOR UPDATE` does not lock completely-`NULL` column families in multi-column-family tables. [#116836](https://github.com/cockroachdb/cockroach/issues/116836)
\ No newline at end of file
diff --git a/src/current/_includes/v25.4/known-limitations/set-transaction-no-rollback.md b/src/current/_includes/v25.4/known-limitations/set-transaction-no-rollback.md
index e70e3c32533..4f4e5af2aab 100644
--- a/src/current/_includes/v25.4/known-limitations/set-transaction-no-rollback.md
+++ b/src/current/_includes/v25.4/known-limitations/set-transaction-no-rollback.md
@@ -1,36 +1,33 @@
-{% if page.name == "set-vars.md" %} `SET` {% else %} [`SET`]({% link {{ page.version.version }}/set-vars.md %}) {% endif %} and {% if page.name == "reset-vars.md" %} `RESET` {% else %} [`RESET`]({% link {{ page.version.version }}/reset-vars.md %}) {% endif %} do not properly apply [`ROLLBACK`]({% link {{ page.version.version }}/rollback-transaction.md %}) within a transaction.
+- {% if page.name == "set-vars.md" %} `SET` {% else %} [`SET`]({% link {{ page.version.version }}/set-vars.md %}) {% endif %} and {% if page.name == "reset-vars.md" %} `RESET` {% else %} [`RESET`]({% link {{ page.version.version }}/reset-vars.md %}) {% endif %} do not properly apply [`ROLLBACK`]({% link {{ page.version.version }}/rollback-transaction.md %}) within a transaction. For example:
-For example:
+ {% include_cached copy-clipboard.html %}
+ ~~~ sql
+ SET TIME ZONE +2;
+ BEGIN;
+ SET TIME ZONE +3;
+ ROLLBACK;
+ SHOW TIME ZONE;
+ ~~~
-{% include_cached copy-clipboard.html %}
-~~~ sql
-SET TIME ZONE +2;
-BEGIN;
-SET TIME ZONE +3;
-ROLLBACK;
-SHOW TIME ZONE;
-~~~
+ ~~~sql
+ timezone
+ ------------
+ <+03>-03
+ ~~~
-~~~sql
- timezone
-------------
- <+03>-03
-~~~
+ {% include_cached copy-clipboard.html %}
+ ~~~ sql
+ SET TIME ZONE +2;
+ BEGIN;
+ RESET TIME ZONE;
+ ROLLBACK;
+ SHOW TIME ZONE;
+ ~~~
-{% include_cached copy-clipboard.html %}
-~~~ sql
-SET TIME ZONE +2;
-BEGIN;
-RESET TIME ZONE;
-ROLLBACK;
-SHOW TIME ZONE;
-~~~
+ ~~~sql
+ timezone
+ ------------
+ UTC
+ ~~~
-~~~sql
- timezone
-------------
- UTC
-~~~
-
-
-[#69396](https://github.com/cockroachdb/cockroach/issues/69396), [#148766](https://github.com/cockroachdb/cockroach/issues/148766)
\ No newline at end of file
+ [#69396](https://github.com/cockroachdb/cockroach/issues/69396), [#148766](https://github.com/cockroachdb/cockroach/issues/148766)
\ No newline at end of file
diff --git a/src/current/_includes/v25.4/known-limitations/spatial-limitations.md b/src/current/_includes/v25.4/known-limitations/spatial-limitations.md
new file mode 100644
index 00000000000..6167ecb02fa
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/spatial-limitations.md
@@ -0,0 +1,10 @@
+- Not all [PostGIS spatial functions](https://postgis.net/docs/reference.html) are supported. [#49203](https://github.com/cockroachdb/cockroach/issues/49203)
+- The `AddGeometryColumn` [spatial function]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions) only allows constant arguments. [#49402](https://github.com/cockroachdb/cockroach/issues/49402)
+- The `AddGeometryColumn` spatial function only allows the `true` value for its `use_typmod` parameter. [#49448](https://github.com/cockroachdb/cockroach/issues/49448)
+- CockroachDB does not support the `@` operator. Instead of using `@` in spatial expressions, we recommend using the inverse, with `~`. For example, instead of `a @ b`, use `b ~ a`. [#56124](https://github.com/cockroachdb/cockroach/issues/56124)
+- CockroachDB does not yet support [`INSERT`]({% link {{ page.version.version }}/insert.md %})s into the [`spatial_ref_sys` table]({% link {{ page.version.version }}/architecture/glossary.md %}#spatial-system-tables). This limitation also blocks the [`ogr2ogr -f PostgreSQL` file conversion command](https://gdal.org/programs/ogr2ogr.html#cmdoption-ogr2ogr-f). [#55903](https://github.com/cockroachdb/cockroach/issues/55903)
+- CockroachDB does not yet support [k-nearest neighbors](https://wikipedia.org/wiki/K-nearest_neighbors_algorithm). [#55227](https://github.com/cockroachdb/cockroach/issues/55227)
+- CockroachDB does not support using [schema name prefixes]({% link {{ page.version.version }}/sql-name-resolution.md %}#how-name-resolution-works) to refer to [data types]({% link {{ page.version.version }}/data-types.md %}) with type modifiers (e.g., `public.geometry(linestring, 4326)`). Instead, use fully-unqualified names to refer to data types with type modifiers (e.g., `geometry(linestring,4326)`). [#56492](https://github.com/cockroachdb/cockroach/issues/56492)
+- {% include {{ page.version.version }}/known-limitations/srid-4326-limitations.md %}
+- {% include {{ page.version.version }}/known-limitations/geospatial-heterogeneous-architectures.md %}
+- [Spatial features]({% link {{ page.version.version }}/spatial-data-overview.md %}) are disabled on ARM Macs due to an issue with macOS code signing for the [GEOS](https://libgeos.org/) libraries. Users needing spatial features on an ARM Mac may instead [use Rosetta](https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta) to [run the Intel binary]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#install-binary) or use the [Docker image]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#use-docker) distribution. [#93161](https://github.com/cockroachdb/cockroach/issues/93161)
diff --git a/src/current/_includes/v25.4/known-limitations/sql-cursors.md b/src/current/_includes/v25.4/known-limitations/sql-cursors.md
index bceff96d5a6..a3e42b9a3ec 100644
--- a/src/current/_includes/v25.4/known-limitations/sql-cursors.md
+++ b/src/current/_includes/v25.4/known-limitations/sql-cursors.md
@@ -1,4 +1,4 @@
-CockroachDB implements SQL {% if page.name == "known-limitations.md" %} [cursor]({% link {{ page.version.version }}/cursors.md %}) {% else %} cursor {% endif %} support with the following limitations:
+CockroachDB implements SQL [cursor]({% link {{ page.version.version }}/cursors.md %}) support with the following limitations:
- `DECLARE` only supports forward cursors. Reverse cursors created with `DECLARE SCROLL` are not supported. [#77102](https://github.com/cockroachdb/cockroach/issues/77102)
- `FETCH` supports forward, relative, and absolute variants, but only for forward cursors. [#77102](https://github.com/cockroachdb/cockroach/issues/77102)
diff --git a/src/current/_includes/v25.4/known-limitations/sql-guardrails-limitations.md b/src/current/_includes/v25.4/known-limitations/sql-guardrails-limitations.md
new file mode 100644
index 00000000000..6d8d60ac614
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/sql-guardrails-limitations.md
@@ -0,0 +1,2 @@
+- The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
+- The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
diff --git a/src/current/_includes/v25.4/known-limitations/sql-input-size-limitations.md b/src/current/_includes/v25.4/known-limitations/sql-input-size-limitations.md
new file mode 100644
index 00000000000..9ee644596e2
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/sql-input-size-limitations.md
@@ -0,0 +1,2 @@
+- CockroachDB imposes a hard limit of 16MiB on the data input for a single statement passed to CockroachDB from a client (including the SQL shell). We do not recommend attempting to execute statements from clients with large input.
+- In the [built-in SQL shell]({% link {{ page.version.version }}/cockroach-sql.md %}), using the [`\|`]({% link {{ page.version.version }}/cockroach-sql.md %}#commands) operator to perform a large number of inputs from a file can cause the server to close the connection. This is because `\|` sends the entire file as a single query to the server, which can exceed the upper bound on the size of a packet the server can accept from any client (16MB). As a workaround, [execute the file from the command line]({% link {{ page.version.version }}/cockroach-sql.md %}#execute-sql-statements-from-a-file) with `cat data.sql | cockroach sql` instead of from within the interactive shell.
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 14f787a9e8d..b2aae6069c2 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,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)
\ No newline at end of file
diff --git a/src/current/_includes/v25.4/known-limitations/subquery-mutations-limitations.md b/src/current/_includes/v25.4/known-limitations/subquery-mutations-limitations.md
new file mode 100644
index 00000000000..771eba80bc6
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/subquery-mutations-limitations.md
@@ -0,0 +1,5 @@
+- Statements containing multiple modification subqueries mutating the same row could cause corruption. These statements are disallowed by default, but you can enable multiple modification subqueries with one the following:
+ - Set the `sql.multiple_modifications_of_table.enabled` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to `true`.
+ - Use the `enable_multiple_modifications_of_table` [session variable]({% link {{ page.version.version }}/set-vars.md %}).
+
+ If multiple mutations inside the same statement affect different tables with [`FOREIGN KEY`]({% link {{ page.version.version }}/foreign-key.md %}) relations and `ON CASCADE` clauses between them, the results will be different from what is expected in PostgreSQL. [#70731](https://github.com/cockroachdb/cockroach/issues/70731)
diff --git a/src/current/_includes/v25.4/known-limitations/transaction-row-count-limitations.md b/src/current/_includes/v25.4/known-limitations/transaction-row-count-limitations.md
new file mode 100644
index 00000000000..ded62d6d9be
--- /dev/null
+++ b/src/current/_includes/v25.4/known-limitations/transaction-row-count-limitations.md
@@ -0,0 +1 @@
+- The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
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 1927a5ac2be..0f44ac320f5 100644
--- a/src/current/_includes/v25.4/known-limitations/udf-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/udf-limitations.md
@@ -1,13 +1,9 @@
-{% 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:
- 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
diff --git a/src/current/_includes/v25.4/known-limitations/view-limitations.md b/src/current/_includes/v25.4/known-limitations/view-limitations.md
index f03af1d3930..22b8a6c29fa 100644
--- a/src/current/_includes/v25.4/known-limitations/view-limitations.md
+++ b/src/current/_includes/v25.4/known-limitations/view-limitations.md
@@ -1 +1,2 @@
- 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)
+- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) (including ENUMs) in views is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
diff --git a/src/current/_includes/v25.4/sql/import-into-regional-by-row-table.md b/src/current/_includes/v25.4/sql/import-into-regional-by-row-table.md
index ffb93fc8046..57f80275cc4 100644
--- a/src/current/_includes/v25.4/sql/import-into-regional-by-row-table.md
+++ b/src/current/_includes/v25.4/sql/import-into-regional-by-row-table.md
@@ -1 +1 @@
-`IMPORT INTO` cannot directly import data to [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#regional-by-row) tables that are part of [multi-region databases]({% link {{ page.version.version }}/multiregion-overview.md %}). For more information, including a workaround for this limitation, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#import-into-a-regional-by-row-table).
+`IMPORT INTO` cannot directly import data to [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#regional-by-row) tables that are part of [multi-region databases]({% link {{ page.version.version }}/multiregion-overview.md %}). For more information, including a workaround for this limitation, refer to [Known Limitations]({% link {{ page.version.version }}/import-into.md %}#known-limitations).
diff --git a/src/current/_includes/v25.4/start-in-docker/mac-linux-steps.md b/src/current/_includes/v25.4/start-in-docker/mac-linux-steps.md
index 9de4428329d..0786bc8f061 100644
--- a/src/current/_includes/v25.4/start-in-docker/mac-linux-steps.md
+++ b/src/current/_includes/v25.4/start-in-docker/mac-linux-steps.md
@@ -281,7 +281,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/_includes/v26.1/known-limitations/alter-sequence-limitations.md b/src/current/_includes/v26.1/known-limitations/alter-sequence-limitations.md
new file mode 100644
index 00000000000..7343a1d1f1e
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/alter-sequence-limitations.md
@@ -0,0 +1 @@
+- 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)
diff --git a/src/current/_includes/v26.1/known-limitations/alter-table-add-column-limitations.md b/src/current/_includes/v26.1/known-limitations/alter-table-add-column-limitations.md
new file mode 100644
index 00000000000..a8e71e5e59c
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/alter-table-add-column-limitations.md
@@ -0,0 +1,10 @@
+- It is currently not possible to [add a column]({% link {{ page.version.version }}/alter-table.md %}#add-column) to a table when:
+ - The column uses a [sequence]({% link {{ page.version.version }}/create-sequence.md %}) as the [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) value, for example using `nextval()`.
+ - The column uses `GENERATED ALWAYS AS IDENTITY` or `GENERATED BY DEFAULT AS IDENTITY`, unless the table being altered is empty.
+
+ This is because CockroachDB does not support back-filling sequential column data. [#42508](https://github.com/cockroachdb/cockroach/issues/42508)
+- When executing an [`ALTER TABLE ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statement with a [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) expression, new values generated:
+ - Use the default [search path]({% link {{ page.version.version }}/sql-name-resolution.md %}#search-path) regardless of the search path configured in the current session via `SET SEARCH_PATH`.
+ - Use the UTC time zone regardless of the time zone configured in the current session via [`SET TIME ZONE`]({% link {{ page.version.version }}/set-vars.md %}).
+ - Have no default database regardless of the default database configured in the current session via [`SET DATABASE`]({% link {{ page.version.version }}/set-vars.md %}), so you must specify the database of any tables they reference.
+ - Use the transaction timestamp for the `statement_timestamp()` function regardless of the time at which the `ALTER` statement was issued.
diff --git a/src/current/_includes/v26.1/known-limitations/client-connections-limitations.md b/src/current/_includes/v26.1/known-limitations/client-connections-limitations.md
new file mode 100644
index 00000000000..bf8129a7756
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/client-connections-limitations.md
@@ -0,0 +1 @@
+- When a node has both a high number of client connections and running queries, the node may crash due to memory exhaustion. This is due to CockroachDB not accurately limiting the number of clients and queries based on the amount of available RAM on the node. To prevent memory exhaustion, monitor each node's memory usage and ensure there is some margin between maximum CockroachDB memory usage and available system RAM. For more details about memory usage in CockroachDB, see [this blog post](https://www.cockroachlabs.com/blog/memory-usage-cockroachdb/).
diff --git a/src/current/_includes/v26.1/known-limitations/collate-limitations.md b/src/current/_includes/v26.1/known-limitations/collate-limitations.md
new file mode 100644
index 00000000000..d3e3e712bb5
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/collate-limitations.md
@@ -0,0 +1 @@
+- Many string operations are not properly overloaded for [collated strings]({% link {{ page.version.version }}/collate.md %}). For example, the `||` concatenation operator works with regular strings but returns an error with collated strings. [#10679](https://github.com/cockroachdb/cockroach/issues/10679)
diff --git a/src/current/_includes/v26.1/known-limitations/column-family-limitations.md b/src/current/_includes/v26.1/known-limitations/column-family-limitations.md
new file mode 100644
index 00000000000..7359544e968
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/column-family-limitations.md
@@ -0,0 +1 @@
+- When creating or updating a row, if the combined size of all values in a single [column family]({% link {{ page.version.version }}/column-families.md %}) exceeds the [max range size]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) for the table, the operation may fail, or cluster performance may suffer. As a workaround, you can either [manually split a table's columns into multiple column families]({% link {{ page.version.version }}/column-families.md %}#manual-override), or you can [create a table-specific zone configuration]({% link {{ page.version.version }}/configure-replication-zones.md %}#create-a-replication-zone-for-a-table) with an increased max range size.
diff --git a/src/current/_includes/v26.1/known-limitations/comment-on-limitations.md b/src/current/_includes/v26.1/known-limitations/comment-on-limitations.md
new file mode 100644
index 00000000000..568b31ec737
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/comment-on-limitations.md
@@ -0,0 +1 @@
+- The [`COMMENT ON`]({% link {{ page.version.version }}/comment-on.md %}) statement associates comments to databases, tables, or columns. However, the internal table (`system.comments`) in which these comments are stored is not captured by a [`BACKUP`]({% link {{ page.version.version }}/backup.md %}) of an individual table or database. As a workaround, take a cluster backup instead, as the `system.comments` table is included in cluster backups. [#44396](https://github.com/cockroachdb/cockroach/issues/44396)
diff --git a/src/current/_includes/v26.1/known-limitations/composite-type-limitations.md b/src/current/_includes/v26.1/known-limitations/composite-type-limitations.md
new file mode 100644
index 00000000000..1ceecb5d889
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/composite-type-limitations.md
@@ -0,0 +1,2 @@
+- Updating subfields of composite types using dot syntax results in a syntax error. [#102984](https://github.com/cockroachdb/cockroach/issues/102984)
+- Tuple elements cannot be accessed without enclosing the [composite variable]({% link {{ page.version.version }}/create-type.md %}) name in parentheses. For example, `(OLD).column` and `(NEW).column` when used in [triggers]({% link {{ page.version.version }}/triggers.md %}). [#114687](https://github.com/cockroachdb/cockroach/issues/114687)
diff --git a/src/current/_includes/v26.1/known-limitations/data-domiciling-limitations.md b/src/current/_includes/v26.1/known-limitations/data-domiciling-limitations.md
index 44834d0001b..b4e1092fdac 100644
--- a/src/current/_includes/v26.1/known-limitations/data-domiciling-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/data-domiciling-limitations.md
@@ -1,6 +1,4 @@
-{% 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.
diff --git a/src/current/_includes/v26.1/known-limitations/db-console-limitations.md b/src/current/_includes/v26.1/known-limitations/db-console-limitations.md
new file mode 100644
index 00000000000..a67bf16dba2
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/db-console-limitations.md
@@ -0,0 +1 @@
+- Accessing the DB Console for a secure cluster requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
diff --git a/src/current/_includes/v26.1/known-limitations/int-limitations.md b/src/current/_includes/v26.1/known-limitations/int-limitations.md
new file mode 100644
index 00000000000..6333dbf6ed5
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/int-limitations.md
@@ -0,0 +1 @@
+- When setting the `default_int_size` [session variable]({% link {{ page.version.version }}/set-vars.md %}) in a batch of statements such as `SET default_int_size='int4'; SELECT 1::INT`, the `default_int_size` variable will not take effect until the next statement. Statement parsing is asynchronous with statement execution. As a workaround, set `default_int_size` via your database driver, or ensure that `SET default_int_size` is in its own statement. [#32846](https://github.com/cockroachdb/cockroach/issues/32846)
diff --git a/src/current/_includes/v26.1/known-limitations/inverted-index-limitations.md b/src/current/_includes/v26.1/known-limitations/inverted-index-limitations.md
new file mode 100644
index 00000000000..1b0eb8d4335
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/inverted-index-limitations.md
@@ -0,0 +1,3 @@
+- CockroachDB does not allow inverted indexes with a [`STORING` column]({% link {{ page.version.version }}/create-index.md %}#store-columns). [#88278](https://github.com/cockroachdb/cockroach/issues/88278)
+- CockroachDB cannot index-accelerate queries with `@@` predicates when both sides of the operator are variables for `tsvector` and `tsquery` types. [#102731](https://github.com/cockroachdb/cockroach/issues/102731)
+- [Left joins]({% link {{ page.version.version }}/joins.md %}#left-outer-joins) and anti joins involving [`JSONB`]({% link {{ page.version.version }}/jsonb.md %}), [`ARRAY`]({% link {{ page.version.version }}/array.md %}), or [spatial-typed]({% link {{ page.version.version }}/export-spatial-data.md %}) columns with a multi-column or [partitioned]({% link {{ page.version.version }}/alter-index.md %}#partition-by) [GIN index](inverted-indexes.html) will not take advantage of the index if the prefix columns of the index are unconstrained, or if they are constrained to multiple, constant values. To work around this limitation, make sure that the prefix columns of the index are either constrained to single constant values, or are part of an equality condition with an input column. [#59649](https://github.com/cockroachdb/cockroach/issues/59649)
diff --git a/src/current/_includes/v26.1/known-limitations/max-row-size-limitations.md b/src/current/_includes/v26.1/known-limitations/max-row-size-limitations.md
new file mode 100644
index 00000000000..9d4d3e12918
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/max-row-size-limitations.md
@@ -0,0 +1 @@
+- The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
diff --git a/src/current/_includes/v26.1/known-limitations/node-shutdown-limitations.md b/src/current/_includes/v26.1/known-limitations/node-shutdown-limitations.md
new file mode 100644
index 00000000000..f35f858bdc1
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/node-shutdown-limitations.md
@@ -0,0 +1,5 @@
+- There is no guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if [`node decommission`]({% link {{ page.version.version }}/cockroach-node.md %}) is interrupted in one of the following ways:
+ - The `cockroach node decommission --wait-all` command was run and then interrupted
+ - The `cockroach node decommission --wait=none` command was run
+
+ This is because the state flip is effected by the CLI program at the end. Only the CLI (or its underlying API call) is able to finalize the "decommissioned" state. If the command is interrupted, or `--wait=none` is used, the state will only flip to "decommissioned" when the CLI program is run again after decommissioning has done all its work. [#94430](https://github.com/cockroachdb/cockroach/issues/94430)
diff --git a/src/current/_includes/v26.1/known-limitations/null-limitations.md b/src/current/_includes/v26.1/known-limitations/null-limitations.md
new file mode 100644
index 00000000000..ad2efce233a
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/null-limitations.md
@@ -0,0 +1 @@
+- By default, CockroachDB orders `NULL`s before all other values. For compatibility with PostgreSQL, the `null_ordered_last` [session variable]({% link {{ page.version.version }}/set-vars.md %}) was added, which changes the default to order `NULL` values after all other values. This works in most cases, due to some transformations CockroachDB makes in the optimizer to add extra ordering columns. However, it does not work when the ordering column is a tuple. [#93558](https://github.com/cockroachdb/cockroach/issues/93558)
diff --git a/src/current/_includes/v26.1/known-limitations/online-schema-changes-limitations.md b/src/current/_includes/v26.1/known-limitations/online-schema-changes-limitations.md
index 1e7b619fdf8..be6d00c26ce 100644
--- a/src/current/_includes/v26.1/known-limitations/online-schema-changes-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/online-schema-changes-limitations.md
@@ -22,4 +22,20 @@ You cannot start an online schema change on a table if a [primary key change]({%
##### No online schema changes between executions of prepared statements
-{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
\ No newline at end of file
+{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
+
+##### Column-dropping schema changes may not roll back properly
+
+Some [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) that [drop columns]({% link {{ page.version.version }}/alter-table.md %}#drop-column) cannot be [rolled back]({% link {{ page.version.version }}/rollback-transaction.md %}) properly.
+
+In some cases, the rollback will succeed, but the column data might be partially or totally missing, or stale due to the asynchronous nature of the schema change. [#46541](https://github.com/cockroachdb/cockroach/issues/46541)
+
+In other cases, the rollback will fail in such a way that will never be cleaned up properly, leaving the table descriptor in a state where no other schema changes can be run successfully. [#47712](https://github.com/cockroachdb/cockroach/issues/47712)
+
+To reduce the chance that a column drop will roll back incorrectly:
+
+- Perform column drops in transactions separate from other schema changes. This ensures that other schema change failures will not cause the column drop to be rolled back.
+- Drop all [constraints]({% link {{ page.version.version }}/constraints.md %}) (including [unique indexes]({% link {{ page.version.version }}/unique.md %})) on the column in a separate transaction, before dropping the column.
+- Drop any [default values]({% link {{ page.version.version }}/default-value.md %}) or [computed expressions]({% link {{ page.version.version }}/computed-columns.md %}) on a column before attempting to drop the column. This prevents conflicts between constraints and default/computed values during a column drop rollback.
+
+If you think a rollback of a column-dropping schema change has occurred, check the [jobs table]({% link {{ page.version.version }}/show-jobs.md %}). Schema changes with an error prefaced by `cannot be reverted, manual cleanup may be required` might require manual intervention.
\ No newline at end of file
diff --git a/src/current/_includes/v26.1/known-limitations/partition-limitations.md b/src/current/_includes/v26.1/known-limitations/partition-limitations.md
new file mode 100644
index 00000000000..f8ba5e979fa
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/partition-limitations.md
@@ -0,0 +1,3 @@
+- When defining a [table partition]({% link {{ page.version.version }}/partitioning.md %}), either during table creation or table alteration, it is not possible to use placeholders in the `PARTITION BY` clause.
+- CockroachDB does not currently support dropping a single partition from a table. In order to remove partitions, you can [repartition]({% unless page.name == "partitioning.md" %}{% link {{ page.version.version }}/partitioning.md %}{% endunless %}#repartition-a-table) the table.
+- In cases where the partition definition includes a comparison with `NULL` and a query constraint, incorrect query plans are returned. However, this case uses non-standard partitioning which defines partitions which could never hold values, so it is not likely to occur in production environments. [#82774](https://github.com/cockroachdb/cockroach/issues/82774)
diff --git a/src/current/_includes/v26.1/known-limitations/plpgsql-limitations.md b/src/current/_includes/v26.1/known-limitations/plpgsql-limitations.md
index c17954748a0..60b3104942e 100644
--- a/src/current/_includes/v26.1/known-limitations/plpgsql-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/plpgsql-limitations.md
@@ -1,5 +1,3 @@
-{% if page.name != "known-limitations.md" # New limitations in v24.2 %}
-{% endif %}
- It is not possible to use a variable as a target more than once in the same `INTO` clause. For example, `SELECT 1, 2 INTO x, x;`. [#121605](https://github.com/cockroachdb/cockroach/issues/121605)
- PLpgSQL variable declarations cannot inherit the type of a table row or column using `%TYPE` or `%ROWTYPE` syntax. [#114676](https://github.com/cockroachdb/cockroach/issues/114676)
- PL/pgSQL arguments cannot be referenced with ordinals (e.g., `$1`, `$2`). [#114701](https://github.com/cockroachdb/cockroach/issues/114701)
diff --git a/src/current/_includes/v26.1/known-limitations/read-committed-limitations.md b/src/current/_includes/v26.1/known-limitations/read-committed-limitations.md
index 7bd9e27304a..b4722a0c369 100644
--- a/src/current/_includes/v26.1/known-limitations/read-committed-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/read-committed-limitations.md
@@ -1,6 +1,4 @@
-{% 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.
diff --git a/src/current/_includes/v26.1/known-limitations/routine-limitations.md b/src/current/_includes/v26.1/known-limitations/routine-limitations.md
index 331d494c78f..90d2c6f9c4f 100644
--- a/src/current/_includes/v26.1/known-limitations/routine-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/routine-limitations.md
@@ -1,5 +1,3 @@
-{% if page.name != "known-limitations.md" # New limitations in v24.2 %}
-{% endif %}
- Routines cannot be invoked with named arguments, e.g., `SELECT foo(a => 1, b => 2);` or `SELECT foo(b := 1, a := 2);`. [#122264](https://github.com/cockroachdb/cockroach/issues/122264)
- Routines cannot be created if they reference temporary tables. [#121375](https://github.com/cockroachdb/cockroach/issues/121375)
- Routines cannot be created with unnamed `INOUT` parameters. For example, `CREATE PROCEDURE p(INOUT INT) AS $$ BEGIN NULL; END; $$ LANGUAGE PLpgSQL;`. [#121251](https://github.com/cockroachdb/cockroach/issues/121251)
diff --git a/src/current/_includes/v26.1/known-limitations/savepoint-limitations.md b/src/current/_includes/v26.1/known-limitations/savepoint-limitations.md
new file mode 100644
index 00000000000..58451f4ae28
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/savepoint-limitations.md
@@ -0,0 +1 @@
+- Transactions with [priority `HIGH`]({% link {{ page.version.version }}/transactions.md %}#transaction-priorities) that contain DDL and `ROLLBACK TO SAVEPOINT` are not supported, as they could result in a deadlock. [#46414](https://github.com/cockroachdb/cockroach/issues/46414)
diff --git a/src/current/_includes/v26.1/known-limitations/select-for-update-limitations.md b/src/current/_includes/v26.1/known-limitations/select-for-update-limitations.md
index 894f1f9441a..327f9b619e1 100644
--- a/src/current/_includes/v26.1/known-limitations/select-for-update-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/select-for-update-limitations.md
@@ -1,10 +1,7 @@
-By default under `SERIALIZABLE` isolation, locks acquired using `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` are implemented as fast, in-memory [unreplicated locks](architecture/transaction-layer.html#unreplicated-locks). If a [lease transfer]({% link {{ page.version.version }}/architecture/replication-layer.md %}#leases) or [range split/merge]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-merges) occurs on a range held by an unreplicated lock, the lock is dropped. The following behaviors can occur:
+- By default under `SERIALIZABLE` isolation, locks acquired using `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` are implemented as fast, in-memory [unreplicated locks](architecture/transaction-layer.html#unreplicated-locks). If a [lease transfer]({% link {{ page.version.version }}/architecture/replication-layer.md %}#leases) or [range split/merge]({% link {{ page.version.version }}/architecture/distribution-layer.md %}#range-merges) occurs on a range held by an unreplicated lock, the lock is dropped. The following behaviors can occur:
+ - The desired ordering of concurrent accesses to one or more rows of a table expressed by your use of `SELECT ... FOR UPDATE` may not be preserved (that is, a transaction _B_ against some table _T_ that was supposed to wait behind another transaction _A_ operating on _T_ may not wait for transaction _A_).
+ - The transaction that acquired the (now dropped) unreplicated lock may fail to commit, leading to [transaction retry errors with code `40001`]({% link {{ page.version.version }}/transaction-retry-error-reference.md %}) and the [`restart transaction` error message]({% link {{ page.version.version }}/common-errors.md %}#restart-transaction).
-- The desired ordering of concurrent accesses to one or more rows of a table expressed by your use of `SELECT ... FOR UPDATE` may not be preserved (that is, a transaction _B_ against some table _T_ that was supposed to wait behind another transaction _A_ operating on _T_ may not wait for transaction _A_).
-- The transaction that acquired the (now dropped) unreplicated lock may fail to commit, leading to [transaction retry errors with code `40001`]({% link {{ page.version.version }}/transaction-retry-error-reference.md %}) and the [`restart transaction` error message]({% link {{ page.version.version }}/common-errors.md %}#restart-transaction).
-
-When running under `SERIALIZABLE` isolation, `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` locks should be thought of as best-effort, and should not be relied upon for correctness. Note that [serialization]({% link {{ page.version.version }}/demo-serializable.md %}) is preserved despite this limitation. This limitation is fixed when the `enable_durable_locking_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}#enable-durable-locking-for-serializable) is set to `true`.
-
-{{site.data.alerts.callout_info}}
-This limitation does **not** apply to [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %}) transactions.
-{{site.data.alerts.end}}
\ No newline at end of file
+ When running under `SERIALIZABLE` isolation, `SELECT ... FOR UPDATE` and `SELECT ... FOR SHARE` locks should be thought of as best-effort, and should not be relied upon for correctness. Note that [serialization]({% link {{ page.version.version }}/demo-serializable.md %}) is preserved despite this limitation. This limitation is fixed when the `enable_durable_locking_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}#enable-durable-locking-for-serializable) is set to `true`. This limitation does **not** apply to [`READ COMMITTED`]({% link {{ page.version.version }}/read-committed.md %}) transactions.
+- The new implementation of `SELECT FOR UPDATE` is not yet the default setting under `SERIALIZABLE` isolation. It can be used under `SERIALIZABLE` isolation by setting the `optimizer_use_lock_op_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}) to `true`. [#114737](https://github.com/cockroachdb/cockroachdb/issues/114737)
+- `SELECT FOR UPDATE` does not lock completely-`NULL` column families in multi-column-family tables. [#116836](https://github.com/cockroachdb/cockroach/issues/116836)
\ No newline at end of file
diff --git a/src/current/_includes/v26.1/known-limitations/set-transaction-no-rollback.md b/src/current/_includes/v26.1/known-limitations/set-transaction-no-rollback.md
index e70e3c32533..4f4e5af2aab 100644
--- a/src/current/_includes/v26.1/known-limitations/set-transaction-no-rollback.md
+++ b/src/current/_includes/v26.1/known-limitations/set-transaction-no-rollback.md
@@ -1,36 +1,33 @@
-{% if page.name == "set-vars.md" %} `SET` {% else %} [`SET`]({% link {{ page.version.version }}/set-vars.md %}) {% endif %} and {% if page.name == "reset-vars.md" %} `RESET` {% else %} [`RESET`]({% link {{ page.version.version }}/reset-vars.md %}) {% endif %} do not properly apply [`ROLLBACK`]({% link {{ page.version.version }}/rollback-transaction.md %}) within a transaction.
+- {% if page.name == "set-vars.md" %} `SET` {% else %} [`SET`]({% link {{ page.version.version }}/set-vars.md %}) {% endif %} and {% if page.name == "reset-vars.md" %} `RESET` {% else %} [`RESET`]({% link {{ page.version.version }}/reset-vars.md %}) {% endif %} do not properly apply [`ROLLBACK`]({% link {{ page.version.version }}/rollback-transaction.md %}) within a transaction. For example:
-For example:
+ {% include_cached copy-clipboard.html %}
+ ~~~ sql
+ SET TIME ZONE +2;
+ BEGIN;
+ SET TIME ZONE +3;
+ ROLLBACK;
+ SHOW TIME ZONE;
+ ~~~
-{% include_cached copy-clipboard.html %}
-~~~ sql
-SET TIME ZONE +2;
-BEGIN;
-SET TIME ZONE +3;
-ROLLBACK;
-SHOW TIME ZONE;
-~~~
+ ~~~sql
+ timezone
+ ------------
+ <+03>-03
+ ~~~
-~~~sql
- timezone
-------------
- <+03>-03
-~~~
+ {% include_cached copy-clipboard.html %}
+ ~~~ sql
+ SET TIME ZONE +2;
+ BEGIN;
+ RESET TIME ZONE;
+ ROLLBACK;
+ SHOW TIME ZONE;
+ ~~~
-{% include_cached copy-clipboard.html %}
-~~~ sql
-SET TIME ZONE +2;
-BEGIN;
-RESET TIME ZONE;
-ROLLBACK;
-SHOW TIME ZONE;
-~~~
+ ~~~sql
+ timezone
+ ------------
+ UTC
+ ~~~
-~~~sql
- timezone
-------------
- UTC
-~~~
-
-
-[#69396](https://github.com/cockroachdb/cockroach/issues/69396), [#148766](https://github.com/cockroachdb/cockroach/issues/148766)
\ No newline at end of file
+ [#69396](https://github.com/cockroachdb/cockroach/issues/69396), [#148766](https://github.com/cockroachdb/cockroach/issues/148766)
\ No newline at end of file
diff --git a/src/current/_includes/v26.1/known-limitations/spatial-limitations.md b/src/current/_includes/v26.1/known-limitations/spatial-limitations.md
new file mode 100644
index 00000000000..6167ecb02fa
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/spatial-limitations.md
@@ -0,0 +1,10 @@
+- Not all [PostGIS spatial functions](https://postgis.net/docs/reference.html) are supported. [#49203](https://github.com/cockroachdb/cockroach/issues/49203)
+- The `AddGeometryColumn` [spatial function]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions) only allows constant arguments. [#49402](https://github.com/cockroachdb/cockroach/issues/49402)
+- The `AddGeometryColumn` spatial function only allows the `true` value for its `use_typmod` parameter. [#49448](https://github.com/cockroachdb/cockroach/issues/49448)
+- CockroachDB does not support the `@` operator. Instead of using `@` in spatial expressions, we recommend using the inverse, with `~`. For example, instead of `a @ b`, use `b ~ a`. [#56124](https://github.com/cockroachdb/cockroach/issues/56124)
+- CockroachDB does not yet support [`INSERT`]({% link {{ page.version.version }}/insert.md %})s into the [`spatial_ref_sys` table]({% link {{ page.version.version }}/architecture/glossary.md %}#spatial-system-tables). This limitation also blocks the [`ogr2ogr -f PostgreSQL` file conversion command](https://gdal.org/programs/ogr2ogr.html#cmdoption-ogr2ogr-f). [#55903](https://github.com/cockroachdb/cockroach/issues/55903)
+- CockroachDB does not yet support [k-nearest neighbors](https://wikipedia.org/wiki/K-nearest_neighbors_algorithm). [#55227](https://github.com/cockroachdb/cockroach/issues/55227)
+- CockroachDB does not support using [schema name prefixes]({% link {{ page.version.version }}/sql-name-resolution.md %}#how-name-resolution-works) to refer to [data types]({% link {{ page.version.version }}/data-types.md %}) with type modifiers (e.g., `public.geometry(linestring, 4326)`). Instead, use fully-unqualified names to refer to data types with type modifiers (e.g., `geometry(linestring,4326)`). [#56492](https://github.com/cockroachdb/cockroach/issues/56492)
+- {% include {{ page.version.version }}/known-limitations/srid-4326-limitations.md %}
+- {% include {{ page.version.version }}/known-limitations/geospatial-heterogeneous-architectures.md %}
+- [Spatial features]({% link {{ page.version.version }}/spatial-data-overview.md %}) are disabled on ARM Macs due to an issue with macOS code signing for the [GEOS](https://libgeos.org/) libraries. Users needing spatial features on an ARM Mac may instead [use Rosetta](https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta) to [run the Intel binary]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#install-binary) or use the [Docker image]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#use-docker) distribution. [#93161](https://github.com/cockroachdb/cockroach/issues/93161)
diff --git a/src/current/_includes/v26.1/known-limitations/sql-cursors.md b/src/current/_includes/v26.1/known-limitations/sql-cursors.md
index bceff96d5a6..a3e42b9a3ec 100644
--- a/src/current/_includes/v26.1/known-limitations/sql-cursors.md
+++ b/src/current/_includes/v26.1/known-limitations/sql-cursors.md
@@ -1,4 +1,4 @@
-CockroachDB implements SQL {% if page.name == "known-limitations.md" %} [cursor]({% link {{ page.version.version }}/cursors.md %}) {% else %} cursor {% endif %} support with the following limitations:
+CockroachDB implements SQL [cursor]({% link {{ page.version.version }}/cursors.md %}) support with the following limitations:
- `DECLARE` only supports forward cursors. Reverse cursors created with `DECLARE SCROLL` are not supported. [#77102](https://github.com/cockroachdb/cockroach/issues/77102)
- `FETCH` supports forward, relative, and absolute variants, but only for forward cursors. [#77102](https://github.com/cockroachdb/cockroach/issues/77102)
diff --git a/src/current/_includes/v26.1/known-limitations/sql-guardrails-limitations.md b/src/current/_includes/v26.1/known-limitations/sql-guardrails-limitations.md
new file mode 100644
index 00000000000..6d8d60ac614
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/sql-guardrails-limitations.md
@@ -0,0 +1,2 @@
+- The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
+- The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
diff --git a/src/current/_includes/v26.1/known-limitations/sql-input-size-limitations.md b/src/current/_includes/v26.1/known-limitations/sql-input-size-limitations.md
new file mode 100644
index 00000000000..9ee644596e2
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/sql-input-size-limitations.md
@@ -0,0 +1,2 @@
+- CockroachDB imposes a hard limit of 16MiB on the data input for a single statement passed to CockroachDB from a client (including the SQL shell). We do not recommend attempting to execute statements from clients with large input.
+- In the [built-in SQL shell]({% link {{ page.version.version }}/cockroach-sql.md %}), using the [`\|`]({% link {{ page.version.version }}/cockroach-sql.md %}#commands) operator to perform a large number of inputs from a file can cause the server to close the connection. This is because `\|` sends the entire file as a single query to the server, which can exceed the upper bound on the size of a packet the server can accept from any client (16MB). As a workaround, [execute the file from the command line]({% link {{ page.version.version }}/cockroach-sql.md %}#execute-sql-statements-from-a-file) with `cat data.sql | cockroach sql` instead of from within the interactive shell.
diff --git a/src/current/_includes/v26.1/known-limitations/stored-proc-limitations.md b/src/current/_includes/v26.1/known-limitations/stored-proc-limitations.md
index 14f787a9e8d..b2aae6069c2 100644
--- a/src/current/_includes/v26.1/known-limitations/stored-proc-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/stored-proc-limitations.md
@@ -1,4 +1,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)
\ No newline at end of file
diff --git a/src/current/_includes/v26.1/known-limitations/subquery-mutations-limitations.md b/src/current/_includes/v26.1/known-limitations/subquery-mutations-limitations.md
new file mode 100644
index 00000000000..771eba80bc6
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/subquery-mutations-limitations.md
@@ -0,0 +1,5 @@
+- Statements containing multiple modification subqueries mutating the same row could cause corruption. These statements are disallowed by default, but you can enable multiple modification subqueries with one the following:
+ - Set the `sql.multiple_modifications_of_table.enabled` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to `true`.
+ - Use the `enable_multiple_modifications_of_table` [session variable]({% link {{ page.version.version }}/set-vars.md %}).
+
+ If multiple mutations inside the same statement affect different tables with [`FOREIGN KEY`]({% link {{ page.version.version }}/foreign-key.md %}) relations and `ON CASCADE` clauses between them, the results will be different from what is expected in PostgreSQL. [#70731](https://github.com/cockroachdb/cockroach/issues/70731)
diff --git a/src/current/_includes/v26.1/known-limitations/transaction-row-count-limitations.md b/src/current/_includes/v26.1/known-limitations/transaction-row-count-limitations.md
new file mode 100644
index 00000000000..ded62d6d9be
--- /dev/null
+++ b/src/current/_includes/v26.1/known-limitations/transaction-row-count-limitations.md
@@ -0,0 +1 @@
+- The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
diff --git a/src/current/_includes/v26.1/known-limitations/udf-limitations.md b/src/current/_includes/v26.1/known-limitations/udf-limitations.md
index 1927a5ac2be..0f44ac320f5 100644
--- a/src/current/_includes/v26.1/known-limitations/udf-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/udf-limitations.md
@@ -1,13 +1,9 @@
-{% 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:
- 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
diff --git a/src/current/_includes/v26.1/known-limitations/view-limitations.md b/src/current/_includes/v26.1/known-limitations/view-limitations.md
index f03af1d3930..22b8a6c29fa 100644
--- a/src/current/_includes/v26.1/known-limitations/view-limitations.md
+++ b/src/current/_includes/v26.1/known-limitations/view-limitations.md
@@ -1 +1,2 @@
- 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)
+- Casting subqueries to [user-defined types]({% link {{ page.version.version }}/create-type.md %}) (including ENUMs) in views is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
diff --git a/src/current/_includes/v26.1/sql/import-into-regional-by-row-table.md b/src/current/_includes/v26.1/sql/import-into-regional-by-row-table.md
index ffb93fc8046..57f80275cc4 100644
--- a/src/current/_includes/v26.1/sql/import-into-regional-by-row-table.md
+++ b/src/current/_includes/v26.1/sql/import-into-regional-by-row-table.md
@@ -1 +1 @@
-`IMPORT INTO` cannot directly import data to [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#regional-by-row) tables that are part of [multi-region databases]({% link {{ page.version.version }}/multiregion-overview.md %}). For more information, including a workaround for this limitation, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#import-into-a-regional-by-row-table).
+`IMPORT INTO` cannot directly import data to [`REGIONAL BY ROW`]({% link {{ page.version.version }}/alter-table.md %}#regional-by-row) tables that are part of [multi-region databases]({% link {{ page.version.version }}/multiregion-overview.md %}). For more information, including a workaround for this limitation, refer to [Known Limitations]({% link {{ page.version.version }}/import-into.md %}#known-limitations).
diff --git a/src/current/_includes/v26.1/start-in-docker/mac-linux-steps.md b/src/current/_includes/v26.1/start-in-docker/mac-linux-steps.md
index 9de4428329d..0786bc8f061 100644
--- a/src/current/_includes/v26.1/start-in-docker/mac-linux-steps.md
+++ b/src/current/_includes/v26.1/start-in-docker/mac-linux-steps.md
@@ -281,7 +281,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v25.4/alter-sequence.md b/src/current/v25.4/alter-sequence.md
index 7d6b232e2aa..afea50171b5 100644
--- a/src/current/v25.4/alter-sequence.md
+++ b/src/current/v25.4/alter-sequence.md
@@ -246,6 +246,10 @@ SQLSTATE: 42P01
(1 row)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/alter-sequence-limitations.md %}
+
## See also
- [`CREATE SEQUENCE`]({% link {{ page.version.version }}/create-sequence.md %})
diff --git a/src/current/v25.4/alter-table.md b/src/current/v25.4/alter-table.md
index aa3e4fe6484..841344862fb 100644
--- a/src/current/v25.4/alter-table.md
+++ b/src/current/v25.4/alter-table.md
@@ -91,6 +91,10 @@ Parameter | Description |
For usage, see [Synopsis](#synopsis).
+#### Known limitations
+
+{% include {{ page.version.version }}/known-limitations/alter-table-add-column-limitations.md %}
+
### `ADD CONSTRAINT`
Use `ALTER TABLE ... ADD CONSTRAINT` to add the following [constraints]({% link {{ page.version.version }}/constraints.md %}) to columns:
diff --git a/src/current/v25.4/cluster-setup-troubleshooting.md b/src/current/v25.4/cluster-setup-troubleshooting.md
index 9972c334d98..850f9c7119a 100644
--- a/src/current/v25.4/cluster-setup-troubleshooting.md
+++ b/src/current/v25.4/cluster-setup-troubleshooting.md
@@ -223,6 +223,18 @@ To efficiently troubleshoot the issue, it's important to understand where and wh
Again, firewalls or hostname issues can cause any of these steps to fail.
+#### TCP connection lingering
+
+If there is no host at the target IP address, or if a firewall rule blocks traffic to the target address and port, a [TCP handshake can linger](https://github.com/cockroachdb/cockroach/issues/53410) while the client network stack waits for a TCP packet in response to network requests.
+
+**Explanation:** 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. However, the scenario described above can cause connections to hang instead of failing immediately.
+
+**Solution:** To work around this scenario:
+
+- When migrating a node to a new machine, keep the server listening at the previous IP address until the cluster has completed the migration.
+- Configure any active network firewalls to allow node-to-node traffic.
+- Verify that orchestration tools (e.g., Kubernetes) are configured to use the correct network connection information.
+
#### Network partition
If the DB Console
diff --git a/src/current/v25.4/cockroach-sql.md b/src/current/v25.4/cockroach-sql.md
index 24601a20354..14f896f8d78 100644
--- a/src/current/v25.4/cockroach-sql.md
+++ b/src/current/v25.4/cockroach-sql.md
@@ -176,6 +176,10 @@ The **Version** and **Cluster ID** details are particularly noteworthy:
{% include {{ page.version.version }}/sql/sql-examples.md %}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/sql-input-size-limitations.md %}
+
## See also
- [Client Connection Parameters]({% link {{ page.version.version }}/connection-parameters.md %})
diff --git a/src/current/v25.4/cockroach-start.md b/src/current/v25.4/cockroach-start.md
index 2bec1c357e2..831f0a9e449 100644
--- a/src/current/v25.4/cockroach-start.md
+++ b/src/current/v25.4/cockroach-start.md
@@ -189,6 +189,20 @@ For another multi-region example, see [Start a multi-region cluster](#start-a-mu
For more information about how to use CockroachDB's multi-region capabilities, see the [Multi-Region Capabilities Overview]({% link {{ page.version.version }}/multiregion-overview.md %}).
+#### Load-based lease rebalancing in uneven latency deployments
+
+When nodes are started with the `--locality` flag, CockroachDB attempts to place the replica lease holder (the replica that client requests are forwarded to) on the node closest to the source of the request. This means as client requests move geographically, so too does the replica lease holder.
+
+However, you might see increased latency caused by a consistently high rate of lease transfers between datacenters in the following case:
+
+- Your cluster runs in datacenters which are very different distances away from each other.
+- Each node was started with a single tier of `--locality`, e.g., `--locality=datacenter=a`.
+- Most client requests get sent to a single datacenter because that's where all your application traffic is.
+
+To detect if this is happening, open the [DB Console]({% link {{ page.version.version }}/ui-overview.md %}), select the **Queues** dashboard, hover over the **Replication Queue** graph, and check the **Leases Transferred / second** data point. If the value is consistently larger than 0, you should consider stopping and restarting each node with additional tiers of locality to improve request latency.
+
+For example, let's say that latency is 10ms from nodes in datacenter A to nodes in datacenter B but is 100ms from nodes in datacenter A to nodes in datacenter C. To ensure A's and B's relative proximity is factored into lease holder rebalancing, you could restart the nodes in datacenter A and B with a common region, `--locality=region=foo,datacenter=a` and `--locality=region=foo,datacenter=b`, while restarting nodes in datacenter C with a different region, `--locality=region=bar,datacenter=c`.
+
### Storage
- [Storage engine](#storage-engine)
diff --git a/src/current/v25.4/collate.md b/src/current/v25.4/collate.md
index f76379f68f4..90d0b2326f6 100644
--- a/src/current/v25.4/collate.md
+++ b/src/current/v25.4/collate.md
@@ -239,6 +239,10 @@ This is equivalent to:
(1 row)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/collate-limitations.md %}
+
## See also
[Data Types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v25.4/column-families.md b/src/current/v25.4/column-families.md
index 240201140a3..6a7f013e5d6 100644
--- a/src/current/v25.4/column-families.md
+++ b/src/current/v25.4/column-families.md
@@ -88,6 +88,10 @@ When using the [`ALTER TABLE .. ADD COLUMN`]({% link {{ page.version.version }}/
> ALTER TABLE test ADD COLUMN last_name STRING;
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/column-family-limitations.md %}
+
## See also
- [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %})
diff --git a/src/current/v25.4/comment-on.md b/src/current/v25.4/comment-on.md
index 8625702e1a6..613389b23d3 100644
--- a/src/current/v25.4/comment-on.md
+++ b/src/current/v25.4/comment-on.md
@@ -258,6 +258,10 @@ To remove the comment from the type you created in the [preceding example](#add-
COMMENT ON TYPE my_point IS NULL;
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/comment-on-limitations.md %}
+
## See also
- [`CREATE DATABASE`]({% link {{ page.version.version }}/create-database.md %})
diff --git a/src/current/v25.4/computed-columns.md b/src/current/v25.4/computed-columns.md
index e6cabb5fe13..dca41a6c19e 100644
--- a/src/current/v25.4/computed-columns.md
+++ b/src/current/v25.4/computed-columns.md
@@ -105,6 +105,10 @@ For more information, see [`ADD COLUMN`]({% link {{ page.version.version }}/alte
If the computed column controls row locality in a [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) table (for example, using a custom [`crdb_internal_region`]({% link {{ page.version.version }}/alter-table.md %}#crdb_region) column with `REGIONAL BY ROW AS`), you can change its expression by following the steps in [Modify the region column or its expression]({% link {{ page.version.version }}/alter-table.md %}#modify-rbr-region-column).
{{site.data.alerts.end}}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/max-row-size-limitations.md %}
+
## See also
- [Scalar Expressions]({% link {{ page.version.version }}/scalar-expressions.md %})
diff --git a/src/current/v25.4/connection-pooling.md b/src/current/v25.4/connection-pooling.md
index 9c8f1ab35d6..9b7c2dfebfc 100644
--- a/src/current/v25.4/connection-pooling.md
+++ b/src/current/v25.4/connection-pooling.md
@@ -237,3 +237,7 @@ defer dbpool.Close()
For a full list of connection pool configuration parameters for pgxpool, see [the pgxpool documentation](https://pkg.go.dev/github.com/jackc/pgx/v5/pgxpool#Config).
+
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/client-connections-limitations.md %}
diff --git a/src/current/v25.4/create-table.md b/src/current/v25.4/create-table.md
index e14849f0f2c..5b798b4d1f7 100644
--- a/src/current/v25.4/create-table.md
+++ b/src/current/v25.4/create-table.md
@@ -155,7 +155,7 @@ If you use `GENERATED BY DEFAULT AS IDENTITY` to define the identity column, any
Note the following limitations of identity columns:
-- `GENERATED ALWAYS AS IDENTITY`/`GENERATED BY DEFAULT AS IDENTITY` is supported in [`ALTER TABLE ... ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statements only when the table being altered is empty, as [CockroachDB does not support back-filling sequential column data]({% link {{ page.version.version }}/known-limitations.md %}#adding-a-column-with-sequence-based-default-values). For more information, see [#42508](https://github.com/cockroachdb/cockroach/issues/42508).
+- `GENERATED ALWAYS AS IDENTITY`/`GENERATED BY DEFAULT AS IDENTITY` is supported in [`ALTER TABLE ... ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statements only when the table being altered is empty. Refer to [`ALTER TABLE ... ADD COLUMN` known limitations]({% link {{ page.version.version }}/alter-table.md %}#add-column).
- Unlike PostgreSQL, CockroachDB does not support using the `OVERRIDING SYSTEM VALUE` clause in `INSERT`/`UPDATE`/`UPSERT` statements to overwrite `GENERATED ALWAYS AS IDENTITY` identity column values.
For an example of an identity column, see [Create a table with an identity column](#create-a-table-with-an-identity-column).
diff --git a/src/current/v25.4/create-type.md b/src/current/v25.4/create-type.md
index 5ba82d1bf31..f58107927df 100644
--- a/src/current/v25.4/create-type.md
+++ b/src/current/v25.4/create-type.md
@@ -194,6 +194,10 @@ SELECT * FROM points ORDER BY ((p).x) ASC LIMIT 25;
(25 rows)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/composite-type-limitations.md %}
+
## See also
- [Data types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v25.4/deployment-operations-skills-taxonomy.md b/src/current/v25.4/deployment-operations-skills-taxonomy.md
index 151fd3fe0a5..27308a68be6 100644
--- a/src/current/v25.4/deployment-operations-skills-taxonomy.md
+++ b/src/current/v25.4/deployment-operations-skills-taxonomy.md
@@ -27,7 +27,7 @@ This section covers how to ensure that your hardware and network are properly co
- [Verify vCPU, RAM, storage, and disk IOPS performance]({% link {{ page.version.version }}/recommended-production-settings.md %}#hardware)
- [Configure time synchronization with NTP server]({% link {{ page.version.version }}/deploy-cockroachdb-on-premises.md %}#step-1-synchronize-clocks)
-- [Validate network connectivity]({% link {{ page.version.version }}/known-limitations.md %}#cockroachdb-does-not-test-for-all-connection-failure-scenarios)
+- [Validate network connectivity]({% link {{ page.version.version }}/cluster-setup-troubleshooting.md %}#tcp-connection-lingering)
## Security
diff --git a/src/current/v25.4/export-spatial-data.md b/src/current/v25.4/export-spatial-data.md
index c06ebe6062d..5f4ba3a0640 100644
--- a/src/current/v25.4/export-spatial-data.md
+++ b/src/current/v25.4/export-spatial-data.md
@@ -102,7 +102,7 @@ This can be addressed in one of the following ways:
- [Spatial Data Overview]({% link {{ page.version.version }}/spatial-data-overview.md %})
- [Spatial indexes]({% link {{ page.version.version }}/spatial-indexes.md %})
- [Spatial and GIS Glossary of Terms]({% link {{ page.version.version }}/architecture/glossary.md %})
-- [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations)
+- [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations)
- [Spatial functions]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions)
- [POINT]({% link {{ page.version.version }}/point.md %})
- [LINESTRING]({% link {{ page.version.version }}/linestring.md %})
diff --git a/src/current/v25.4/int.md b/src/current/v25.4/int.md
index 0a2250fc220..a3929153932 100644
--- a/src/current/v25.4/int.md
+++ b/src/current/v25.4/int.md
@@ -105,6 +105,10 @@ Type | Details
`INTERVAL` | Converts to seconds.
`STRING` | ––
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/int-limitations.md %}
+
## See also
- [Data Types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v25.4/inverted-indexes.md b/src/current/v25.4/inverted-indexes.md
index 6ca9524104b..d324ae32a01 100644
--- a/src/current/v25.4/inverted-indexes.md
+++ b/src/current/v25.4/inverted-indexes.md
@@ -392,6 +392,10 @@ For an example showing how to create a full-text index on a [`TSVECTOR`]({% link
{% include {{ page.version.version }}/sql/inverted-joins.md %}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/inverted-index-limitations.md %}
+
## See also
- [Indexes]({% link {{ page.version.version }}/indexes.md %})
diff --git a/src/current/v25.4/joins.md b/src/current/v25.4/joins.md
index 81de855c725..b72ddca83a4 100644
--- a/src/current/v25.4/joins.md
+++ b/src/current/v25.4/joins.md
@@ -185,6 +185,10 @@ If you see an `apply-join`, it means the optimizer was not able to perform de-co
- Use [`EXPLAIN`]({% link {{ page.version.version }}/explain.md %}) over queries containing joins to verify that indexes are used.
- Use [indexes]({% link {{ page.version.version }}/indexes.md %}) for faster joins.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/inverted-index-limitations.md %}
+
## See also
- [Join hints]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-hints)
diff --git a/src/current/v25.4/known-limitations.md b/src/current/v25.4/known-limitations.md
deleted file mode 100644
index 992d0738147..00000000000
--- a/src/current/v25.4/known-limitations.md
+++ /dev/null
@@ -1,748 +0,0 @@
----
-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
-docs_area: releases
----
-
-{% assign previous_version = site.data.versions | where_exp: "previous_version", "previous_version.major_version == page.version.version" | map: "previous_version" | first %}
-
-## New limitations in {{ page.version.version }}
-
-This section describes newly identified limitations in CockroachDB {{ page.version.version }}.
-
-### View support
-
-{% include {{ page.version.version }}/known-limitations/view-limitations.md %}
-
-### User-defined functions
-
-- 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
-
-- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529)
-
-### 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#issuecomment-3222083180)
-
-### Data domiciling
-
-- 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
-
-This section describes limitations from previous CockroachDB versions that still impact {{ page.version.version }}.
-
-### SQL statements
-
-#### Syntax and behavior differences from PostgreSQL
-
-CockroachDB supports the [PostgreSQL wire protocol](https://www.postgresql.org/docs/current/protocol.html) and the majority of its syntax. For a list of known differences in syntax and behavior between CockroachDB and PostgreSQL, see [Features that differ from PostgreSQL]({% link {{ page.version.version }}/postgresql-compatibility.md %}#features-that-differ-from-postgresql).
-
-#### JSONPath limitations
-
-{% include {{ page.version.version }}/known-limitations/jsonpath-limitations.md %}
-
-#### `AS OF SYSTEM TIME` limitations
-
-- {% include {{ page.version.version }}/known-limitations/aost-limitations.md %}
-- {% include {{ page.version.version }}/known-limitations/create-statistics-aost-limitation.md %}
-
-#### `COPY` syntax not supported by CockroachDB
-
-{% include {{ page.version.version }}/known-limitations/copy-syntax.md %}
-
-#### `IMPORT INTO` limitations
-
-{% include {{ page.version.version }}/known-limitations/import-into-limitations.md %}
-
-#### `ALTER VIEW` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-view-limitations.md %}
-
-#### Row-Level TTL limitations
-
-{% include {{page.version.version}}/known-limitations/row-level-ttl-limitations.md %}
-
-#### `CAST` expressions containing a subquery with an `ENUM` target are not supported
-
-Casting subqueries to ENUMs in views and UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
-
-#### Statements containing multiple modification subqueries of the same table are disallowed
-
-Statements containing multiple modification subqueries mutating the same row could cause corruption. These statements are disallowed by default, but you can enable multiple modification subqueries with one the following:
-
-- Set the `sql.multiple_modifications_of_table.enabled` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to `true`.
-- Use the `enable_multiple_modifications_of_table` [session variable]({% link {{ page.version.version }}/set-vars.md %}).
-
-If multiple mutations inside the same statement affect different tables with [`FOREIGN KEY`]({% link {{ page.version.version }}/foreign-key.md %}) relations and `ON CASCADE` clauses between them, the results will be different from what is expected in PostgreSQL. [#70731](https://github.com/cockroachdb/cockroach/issues/70731)
-
-#### Using `default_int_size` session variable in batch of statements
-
-When setting the `default_int_size` [session variable]({% link {{ page.version.version }}/set-vars.md %}) in a batch of statements such as `SET default_int_size='int4'; SELECT 1::IN`, the `default_int_size` variable will not take effect until the next statement. Statement parsing is asynchronous with statement execution.
-
-As a workaround, set `default_int_size` via your database driver, or ensure that `SET default_int_size` is in its own statement. [#32846](https://github.com/cockroachdb/cockroach/issues/32846)
-
-#### Overload resolution for collated strings
-
-Many string operations are not properly overloaded for [collated strings]({% link {{ page.version.version }}/collate.md %}), for example:
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> SELECT 'string1' || 'string2';
-~~~
-
-~~~
- ?column?
-------------------
- string1string2
-(1 row)
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> SELECT ('string1' collate en) || ('string2' collate en);
-~~~
-
-~~~
-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)
-
-#### `null_ordered_last` does not produce correct results with tuples
-
-By default, CockroachDB orders `NULL`s before all other values. For compatibility with PostgreSQL, the `null_ordered_last` [session variable]({% link {{ page.version.version }}/set-vars.md %}) was added, which changes the default to order `NULL` values after all other values. This works in most cases, due to some transformations CockroachDB makes in the optimizer to add extra ordering columns. However, it does not work when the ordering column is a tuple. [#93558](https://github.com/cockroachdb/cockroach/issues/93558)
-
-### Functions and procedures
-
-#### PL/pgSQL support
-
-{% include {{ page.version.version }}/known-limitations/plpgsql-limitations.md %}
-
-#### UDF and stored procedure support
-
-{% include {{ page.version.version }}/known-limitations/routine-limitations.md %}
-{% include {{ page.version.version }}/known-limitations/stored-proc-limitations.md %}
-{% include {{ page.version.version }}/known-limitations/udf-limitations.md %}
-
-### Triggers
-
-{% include {{ page.version.version }}/known-limitations/trigger-limitations.md %}
-
-### Transactions
-
-#### Read Committed features and performance
-
-[Read Committed isolation]({% link {{ page.version.version }}/read-committed.md %}) has the following limitations:
-
-{% include {{ page.version.version }}/known-limitations/read-committed-limitations.md %}
-
-#### Follower reads
-
-{% include {{ page.version.version }}/known-limitations/follower-reads-limitations.md %}
-
-#### `SELECT FOR UPDATE` locks are dropped on lease transfers and range splits/merges
-
-{% include {{page.version.version}}/known-limitations/select-for-update-limitations.md %}
-
-#### `SET` does not `ROLLBACK` in a transaction
-
-{% include {{page.version.version}}/known-limitations/set-transaction-no-rollback.md %}
-
-#### `ROLLBACK TO SAVEPOINT` in high-priority transactions containing DDL
-1
-Transactions with [priority `HIGH`]({% link {{ page.version.version }}/transactions.md %}#transaction-priorities) that contain DDL and `ROLLBACK TO SAVEPOINT` are not supported, as they could result in a deadlock. For example:
-
-~~~ sql
-> BEGIN PRIORITY HIGH; SAVEPOINT s; CREATE TABLE t(x INT); ROLLBACK TO SAVEPOINT s;
-~~~
-
-~~~
-ERROR: unimplemented: cannot use ROLLBACK TO SAVEPOINT in a HIGH PRIORITY transaction containing DDL
-SQLSTATE: 0A000
-HINT: You have attempted to use a feature that is not yet implemented.
-See: https://github.com/cockroachdb/cockroach/issues/46414
-~~~
-
-[#46414](https://github.com/cockroachdb/cockroach/issues/46414)
-
-#### `CANCEL JOB` limitations
-
-{% include {{ page.version.version }}/known-limitations/cancel-job-limitations.md %}
-
-#### SQL cursor support
-
-{% include {{page.version.version}}/known-limitations/sql-cursors.md %}
-
-#### Materialized views inside transactions
-
-{% include {{page.version.version}}/known-limitations/cannot-refresh-materialized-views-inside-transactions.md %}
-
-### Schemas and indexes
-
-#### Vector index limitations
-
-{% include {{ page.version.version }}/known-limitations/vector-limitations.md %}
-
-#### Online schema change limitations
-
-{% include {{ page.version.version }}/known-limitations/online-schema-changes-limitations.md %}
-
-#### Adding a column with sequence-based `DEFAULT` values
-
-It is currently not possible to [add a column]({% link {{ page.version.version }}/alter-table.md %}#add-column) to a table when the column uses a [sequence]({% link {{ page.version.version }}/create-sequence.md %}) as the [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) value, for example:
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> CREATE TABLE t (x INT);
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> INSERT INTO t(x) VALUES (1), (2), (3);
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> CREATE SEQUENCE s;
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> ALTER TABLE t ADD COLUMN y INT DEFAULT nextval('s');
-~~~
-
-~~~
-ERROR: failed to construct index entries during backfill: nextval(): unimplemented: cannot evaluate scalar expressions containing sequence operations in this context
-SQLSTATE: 0A000
-HINT: You have attempted to use a feature that is not yet implemented.
-See: https://go.crdb.dev/issue-v/42508/v24.2
-~~~
-
-[#42508](https://github.com/cockroachdb/cockroach/issues/42508)
-
-#### Dropping a column referenced by a partial index
-
-{% include {{ page.version.version }}/known-limitations/drop-column-partial-index.md %}
-
-#### Schema change DDL statements inside a multi-statement transaction can fail while other statements succeed
-
-{% include {{ page.version.version }}/known-limitations/schema-change-ddl-inside-multi-statement-transactions.md %}
-
-#### Schema changes between executions of prepared statements
-
-{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
-
-#### New values generated by `DEFAULT` expressions during `ALTER TABLE ADD COLUMN`
-
-When executing an [`ALTER TABLE ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statement with a [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) expression, new values generated:
-
-- use the default [search path]({% link {{ page.version.version }}/sql-name-resolution.md %}#search-path) regardless of the search path configured in the current session via `SET SEARCH_PATH`.
-- use the UTC time zone regardless of the time zone configured in the current session via [`SET TIME ZONE`]({% link {{ page.version.version }}/set-vars.md %}).
-- have no default database regardless of the default database configured in the current session via [`SET DATABASE`]({% link {{ page.version.version }}/set-vars.md %}), so you must specify the database of any tables they reference.
-- use the transaction timestamp for the `statement_timestamp()` function regardless of the time at which the `ALTER` statement was issued.
-
-#### Some column-dropping schema changes do not roll back properly
-
-Some [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) that [drop columns]({% link {{ page.version.version }}/alter-table.md %}#drop-column) cannot be [rolled back]({% link {{ page.version.version }}/rollback-transaction.md %}) properly.
-
-In some cases, the rollback will succeed, but the column data might be partially or totally missing, or stale due to the asynchronous nature of the schema change. [#46541](https://github.com/cockroachdb/cockroach/issues/46541)
-
-In other cases, the rollback will fail in such a way that will never be cleaned up properly, leaving the table descriptor in a state where no other schema changes can be run successfully. [#47712](https://github.com/cockroachdb/cockroach/issues/47712)
-
-To reduce the chance that a column drop will roll back incorrectly:
-
-- Perform column drops in transactions separate from other schema changes. This ensures that other schema change failures will not cause the column drop to be rolled back.
-
-- Drop all [constraints]({% link {{ page.version.version }}/constraints.md %}) (including [unique indexes]({% link {{ page.version.version }}/unique.md %})) on the column in a separate transaction, before dropping the column.
-
-- Drop any [default values]({% link {{ page.version.version }}/default-value.md %}) or [computed expressions]({% link {{ page.version.version }}/computed-columns.md %}) on a column before attempting to drop the column. This prevents conflicts between constraints and default/computed values during a column drop rollback.
-
-If you think a rollback of a column-dropping schema change has occurred, check the [jobs table]({% link {{ page.version.version }}/show-jobs.md %}). Schema changes with an error prefaced by `cannot be reverted, manual cleanup may be required` might require manual intervention.
-
-#### `ALTER COLUMN` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-column-limitations.md %}
-
-#### `CREATE TABLE AS` limitations
-
-{% include {{ page.version.version }}/known-limitations/create-table-as-limitations.md %}
-
-#### Remove a `UNIQUE` index created as part of `CREATE TABLE`
-
-{% include {{ page.version.version }}/known-limitations/drop-unique-index-from-create-table.md %}
-
-#### Max size of a single column family
-
-When creating or updating a row, if the combined size of all values in a single [column family]({% link {{ page.version.version }}/column-families.md %}) exceeds the [max range size]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) for the table, the operation may fail, or cluster performance may suffer.
-
-As a workaround, you can either [manually split a table's columns into multiple column families]({% link {{ page.version.version }}/column-families.md %}#manual-override), or you can [create a table-specific zone configuration]({% link {{ page.version.version }}/configure-replication-zones.md %}#create-a-replication-zone-for-a-table) with an increased max range size.
-
-#### Dropping a single partition
-
-{% include {{ page.version.version }}/known-limitations/drop-single-partition.md %}
-
-#### Placeholders in `PARTITION BY`
-
-{% include {{ page.version.version }}/known-limitations/partitioning-with-placeholders.md %} [#19464](https://github.com/cockroachdb/cockroach/issues/19464)
-
-#### Unsupported trigram syntax
-
-The following PostgreSQL syntax and features are currently unsupported for [trigrams]({% link {{ page.version.version }}/trigram-indexes.md %}):
-
-{% include {{ page.version.version }}/known-limitations/trigram-unsupported-syntax.md %}
-
-#### Unsupported full-text search features
-
-The following PostgreSQL syntax and features are currently unsupported for [full-text search]({% link {{ page.version.version }}/full-text-search.md %}):
-
-{% include {{ page.version.version }}/known-limitations/full-text-search-unsupported.md %}
-
-#### CockroachDB does not allow inverted indexes with `STORING`
-
-CockroachDB does not allow inverted indexes with a [`STORING` column]({% link {{ page.version.version }}/create-index.md %}#store-columns). [#88278](https://github.com/cockroachdb/cockroach/issues/88278)
-
-#### Multiple arbiter indexes for `INSERT ON CONFLICT DO UPDATE`
-
-{% include {{ page.version.version }}/known-limitations/multiple-arbiter-indexes.md %}
-
-#### Expression index limitations
-
-{% include {{ page.version.version }}/known-limitations/expression-index-limitations.md %}
-
-### Data types
-
-#### `CITEXT` limitations
-
-{% include {{ page.version.version }}/known-limitations/citext-limitations.md %}
-
-#### Spatial support limitations
-
-CockroachDB supports efficiently storing and querying [spatial data]({% link {{ page.version.version }}/export-spatial-data.md %}), with the following limitations:
-
-- Not all [PostGIS spatial functions](https://postgis.net/docs/reference.html) are supported. [#49203](https://github.com/cockroachdb/cockroach/issues/49203)
-
-- The `AddGeometryColumn` [spatial function]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions) only allows constant arguments. [#49402](https://github.com/cockroachdb/cockroach/issues/49402)
-
-- The `AddGeometryColumn` spatial function only allows the `true` value for its `use_typmod` parameter. [#49448](https://github.com/cockroachdb/cockroach/issues/49448)
-
-- CockroachDB does not support the `@` operator. Instead of using `@` in spatial expressions, we recommend using the inverse, with `~`. For example, instead of `a @ b`, use `b ~ a`. [#56124](https://github.com/cockroachdb/cockroach/issues/56124)
-
-- CockroachDB does not yet support [`INSERT`]({% link {{ page.version.version }}/insert.md %})s into the [`spatial_ref_sys` table]({% link {{ page.version.version }}/architecture/glossary.md %}#spatial-system-tables). This limitation also blocks the [`ogr2ogr -f PostgreSQL` file conversion command](https://gdal.org/programs/ogr2ogr.html#cmdoption-ogr2ogr-f). [#55903](https://github.com/cockroachdb/cockroach/issues/55903)
-
-- CockroachDB does not yet support [k-nearest neighbors](https://wikipedia.org/wiki/K-nearest_neighbors_algorithm). [#55227](https://github.com/cockroachdb/cockroach/issues/55227)
-
-- CockroachDB does not support using [schema name prefixes]({% link {{ page.version.version }}/sql-name-resolution.md %}#how-name-resolution-works) to refer to [data types]({% link {{ page.version.version }}/data-types.md %}) with type modifiers (e.g., `public.geometry(linestring, 4326)`). Instead, use fully-unqualified names to refer to data types with type modifiers (e.g., `geometry(linestring,4326)`). [#56492](https://github.com/cockroachdb/cockroach/issues/56492)
-
-- {% 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).
-
-#### Limitations for composite types
-
-- {% include {{page.version.version}}/cdc/types-udt-composite-general.md %} The following limitations apply:
- - {% include {{page.version.version}}/cdc/avro-udt-composite.md %}
- - {% include {{page.version.version}}/cdc/csv-udt-composite.md %}
-
-- Updating subfields of composite types using dot syntax results in a syntax error. [#102984](https://github.com/cockroachdb/cockroach/issues/102984)
-
-- Tuple elements cannot be accessed without enclosing the [composite variable]({% link {{ page.version.version }}/create-type.md %}#create-a-composite-data-type) name in parentheses. For example, `(OLD).column` and `(NEW).column` when used in [triggers]({% link {{ page.version.version }}/triggers.md %}). [#114687](https://github.com/cockroachdb/cockroach/issues/114687)
-
-#### `ALTER TYPE` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-type-limitations.md %}
-
-#### `JSONB` limitations
-
-{% include {{ page.version.version }}/known-limitations/jsonb-limitations.md %}
-
-### Security and privileges
-
-#### Row-level security
-
-- {% 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
-
-{% include {{ page.version.version }}/known-limitations/grant-revoke-schema-changes.md %}
-
-#### `DROP OWNED BY` limitations
-
-{% include {{page.version.version}}/known-limitations/drop-owned-by-limitations.md %}
-
-#### Privileges for `DELETE` and `UPDATE`
-
-Every [`DELETE`]({% link {{ page.version.version }}/delete.md %}) or [`UPDATE`]({% link {{ page.version.version }}/update.md %}) statement constructs a `SELECT` statement, even when no `WHERE` clause is involved. As a result, the user executing `DELETE` or `UPDATE` requires both the `DELETE` and `SELECT` or `UPDATE` and `SELECT` [privileges]({% link {{ page.version.version }}/security-reference/authorization.md %}#managing-privileges) on the table.
-
-### Deployment and operations
-
-#### Admission control
-
-{% include {{ page.version.version }}/known-limitations/admission-control-limitations.md %}
-
-#### Data domiciling
-
-{% 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.
-
-However, if there is no host at the target IP address, or if a firewall rule blocks traffic to the target address and port, a TCP handshake can linger while the client network stack waits for a TCP packet in response to network requests. To work around this kind of scenario, we recommend the following:
-
-- When migrating a node to a new machine, keep the server listening at the previous IP address until the cluster has completed the migration.
-- Configure any active network firewalls to allow node-to-node traffic.
-- Verify that orchestration tools (e.g., Kubernetes) are configured to use the correct network connection information.
-
-[#53410](https://github.com/cockroachdb/cockroach/issues/53410)
-
-#### No guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if `node decommission` is interrupted
-
-There is no guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if [`node decommission`]({% link {{ page.version.version }}/cockroach-node.md %}) is interrupted in one of the following ways:
-
-- The `cockroach node decommission --wait-all` command was run and then interrupted
-- The `cockroach node decommission --wait=none` command was run
-
-This is because the state flip is effected by the CLI program at the end. Only the CLI (or its underlying API call) is able to finalize the "decommissioned" state. If the command is interrupted, or `--wait=none` is used, the state will only flip to "decommissioned" when the CLI program is run again after decommissioning has done all its work. [#94430](https://github.com/cockroachdb/cockroach/issues/94430)
-
-#### Simultaneous client connections and running queries on a single node
-
-When a node has both a high number of client connections and running queries, the node may crash due to memory exhaustion. This is due to CockroachDB not accurately limiting the number of clients and queries based on the amount of available RAM on the node.
-
-To prevent memory exhaustion, monitor each node's memory usage and ensure there is some margin between maximum CockroachDB memory usage and available system RAM. For more details about memory usage in CockroachDB, see [this blog post](https://www.cockroachlabs.com/blog/memory-usage-cockroachdb/).
-
-{% include {{page.version.version}}/sql/server-side-connection-limit.md %} This may be useful in addition to your memory monitoring.
-
-#### Load-based lease rebalancing in uneven latency deployments
-
-When nodes are started with the [`--locality`]({% link {{ page.version.version }}/cockroach-start.md %}#flags) flag, CockroachDB attempts to place the replica lease holder (the replica that client requests are forwarded to) on the node closest to the source of the request. This means as client requests move geographically, so too does the replica lease holder.
-
-However, you might see increased latency caused by a consistently high rate of lease transfers between datacenters in the following case:
-
-- Your cluster runs in datacenters which are very different distances away from each other.
-- Each node was started with a single tier of `--locality`, e.g., `--locality=datacenter=a`.
-- Most client requests get sent to a single datacenter because that's where all your application traffic is.
-
-To detect if this is happening, open the [DB Console]({% link {{ page.version.version }}/ui-overview.md %}), select the **Queues** dashboard, hover over the **Replication Queue** graph, and check the **Leases Transferred / second** data point. If the value is consistently larger than 0, you should consider stopping and restarting each node with additional tiers of locality to improve request latency.
-
-For example, let's say that latency is 10ms from nodes in datacenter A to nodes in datacenter B but is 100ms from nodes in datacenter A to nodes in datacenter C. To ensure A's and B's relative proximity is factored into lease holder rebalancing, you could restart the nodes in datacenter A and B with a common region, `--locality=region=foo,datacenter=a` and `--locality=region=foo,datacenter=b`, while restarting nodes in datacenter C with a different region, `--locality=region=bar,datacenter=c`.
-
-#### Size limits on statement input from SQL clients
-
-CockroachDB imposes a hard limit of 16MiB on the data input for a single statement passed to CockroachDB from a client (including the SQL shell). We do not recommend attempting to execute statements from clients with large input.
-
-#### Using `\|` to perform a large input in the SQL shell
-
-In the [built-in SQL shell]({% link {{ page.version.version }}/cockroach-sql.md %}), using the [`\|`]({% link {{ page.version.version }}/cockroach-sql.md %}#commands) operator to perform a large number of inputs from a file can cause the server to close the connection. This is because `\|` sends the entire file as a single query to the server, which can exceed the upper bound on the size of a packet the server can accept from any client (16MB).
-
-As a workaround, [execute the file from the command line]({% link {{ page.version.version }}/cockroach-sql.md %}#execute-sql-statements-from-a-file) with `cat data.sql | cockroach sql` instead of from within the interactive shell.
-
-#### Spatial features disabled for ARM Macs
-
-[Spatial features]({% link {{ page.version.version }}/spatial-data-overview.md %}) are disabled due to an issue with macOS code signing for the [GEOS](https://libgeos.org/) libraries. Users needing spatial features on an ARM Mac may instead [use Rosetta](https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta) to [run the Intel binary]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#install-binary) or use the [Docker image]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#use-docker) distribution. [GitHub tracking issue](https://github.com/cockroachdb/cockroach/issues/93161)
-
-#### Logging system limitations
-
-{% include {{ page.version.version }}/known-limitations/logging-limitations.md %}
-
-#### Per-replica circuit breaker limitations
-
-{% include {{ page.version.version }}/known-limitations/per-replica-circuit-breaker-limitations.md %}
-
-#### Kubernetes limitations
-
-Refer to [Kubernetes best practices]({% link {{ page.version.version }}/deploy-cockroachdb-with-kubernetes.md %}#best-practices).
-
-### Observability
-
-#### Datadog
-
-{% include {{ page.version.version }}/known-limitations/datadog-self-hosted-limitations.md %}
-
-#### DB Console may become inaccessible for secure clusters
-
-Accessing the DB Console for a secure cluster now requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
-
-#### Available capacity metric in the DB Console
-
-{% include {{ page.version.version }}/misc/available-capacity-metric.md %}
-
-### Disaster recovery
-
-#### Physical cluster replication
-
-{% include {{ page.version.version }}/known-limitations/physical-cluster-replication.md %}
-- {% include {{ page.version.version }}/known-limitations/failover-stop-application.md %}
-
-#### `RESTORE` limitations
-
-- {% include {{ page.version.version }}/known-limitations/restore-udf.md %}
-- {% include {{ page.version.version }}/known-limitations/restore-tables-non-multi-reg.md %}
-- {% include {{ page.version.version }}/known-limitations/restore-multiregion-match.md %}
-
-#### Enterprise `BACKUP` does not capture database/table/column comments
-
-The [`COMMENT ON`]({% link {{ page.version.version }}/comment-on.md %}) statement associates comments to databases, tables, or columns. However, the internal table (`system.comments`) in which these comments are stored is not captured by a [`BACKUP`]({% link {{ page.version.version }}/backup.md %}) of a table or database.
-
-As a workaround, take a cluster backup instead, as the `system.comments` table is included in cluster backups. [#44396](https://github.com/cockroachdb/cockroach/issues/44396)
-
-#### `SHOW BACKUP` does not support symlinks for nodelocal
-
-{% include {{page.version.version}}/known-limitations/show-backup-symlink.md %}
-
-### High Availability
-
-#### Logical data replication (LDR)
-
-- {% include {{ page.version.version }}/known-limitations/ldr-triggers.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-udfs.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-sequences.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-indexes.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-column-families.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-composite-primary.md %}
-
-### Change data capture
-
-Change data capture (CDC) provides efficient, distributed, row-level changefeeds into Apache Kafka for downstream processing such as reporting, caching, or full-text indexing. It has the following known limitations:
-
-{% include {{ page.version.version }}/known-limitations/cdc.md %}
-{% include {{ page.version.version }}/known-limitations/cdc-queries.md %}
-- {% include {{ page.version.version }}/known-limitations/cdc-queries-column-families.md %}
-- {% include {{ page.version.version }}/known-limitations/changefeed-column-family-message.md %}
-
-#### `ALTER CHANGEFEED` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-changefeed-limitations.md %}
-- {% include {{ page.version.version }}/known-limitations/alter-changefeed-cdc-queries.md %}
-
-### Performance optimization
-
-#### Generic query plan limitations
-
-{% include {{ page.version.version }}/known-limitations/generic-query-plan-limitations.md %}
-
-#### Optimizer and locking behavior
-
-The SQL optimizer has limitations under certain isolation levels:
-
-- The new implementation of `SELECT FOR UPDATE` is not yet the default setting under `SERIALIZABLE` isolation. It can be used under `SERIALIZABLE` isolation by setting the `optimizer_use_lock_op_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}) to `true`. [#114737](https://github.com/cockroachdb/cockroach/issues/114737)
-- `SELECT FOR UPDATE` does not lock completely-`NULL` column families in multi-column-family tables. [#116836](https://github.com/cockroachdb/cockroach/issues/116836)
-
-#### Statistics limitations
-
-{% include {{page.version.version}}/known-limitations/stats-refresh-upgrade.md %}
-{% include {{ page.version.version }}/known-limitations/forecasted-stats-limitations.md %}
-
-#### Incorrect query plans for partitions with `NULL` values
-
-In cases where the partition definition includes a comparison with `NULL` and a query constraint, incorrect query plans are returned. However, this case uses non-standard partitioning which defines partitions which could never hold values, so it is not likely to occur in production environments. [#82774](https://github.com/cockroachdb/cockroach/issues/82774)
-
-#### Vectorized engine limitations
-
-{% include {{ page.version.version }}/known-limitations/vectorized-engine-limitations.md %}
-
-#### `transaction_rows_read_err` and `transaction_rows_written_err` do not halt query execution
-
-The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
-
-#### `sql.guardrails.max_row_size_err` misses indexed virtual computed columns
-
-The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
-
-#### Using `LIKE...ESCAPE` in `WHERE` and `HAVING` constraints
-
-CockroachDB tries to optimize most comparisons operators in `WHERE` and `HAVING` clauses into constraints on SQL indexes by only accessing selected rows. This is done for `LIKE` clauses when a common prefix for all selected rows can be determined in the search pattern (e.g., `... LIKE 'Joe%'`). However, this optimization is not yet available if the `ESCAPE` keyword is also used. [#30192](https://github.com/cockroachdb/cockroach/issues/30192)
-
-#### Import with a high amount of disk contention
-
-{% include {{ page.version.version }}/known-limitations/import-high-disk-contention.md %}
-
-#### CockroachDB does not properly optimize some left and anti joins with GIN indexes
-
-[Left joins]({% link {{ page.version.version }}/joins.md %}#left-outer-joins) and anti joins involving [`JSONB`]({% link {{ page.version.version }}/jsonb.md %}), [`ARRAY`]({% link {{ page.version.version }}/array.md %}), or [spatial-typed]({% link {{ page.version.version }}/export-spatial-data.md %}) columns with a multi-column or [partitioned]({% link {{ page.version.version }}/alter-index.md %}#partition-by) [GIN index](inverted-indexes.html) will not take advantage of the index if the prefix columns of the index are unconstrained, or if they are constrained to multiple, constant values.
-
-To work around this limitation, make sure that the prefix columns of the index are either constrained to single constant values, or are part of an equality condition with an input column (e.g., `col1 = col2`, where `col1` is a prefix column and `col2` is an input column).
-
-For example, suppose you have the following [multi-region database]({% link {{ page.version.version }}/multiregion-overview.md %}) and tables:
-
-``` sql
-CREATE DATABASE multi_region_test_db PRIMARY REGION "europe-west1" REGIONS "us-west1", "us-east1" SURVIVE REGION FAILURE;
-USE multi_region_test_db;
-
-CREATE TABLE t1 (
- k INT PRIMARY KEY,
- geom GEOMETRY
-);
-
-CREATE TABLE t2 (
- k INT PRIMARY KEY,
- geom GEOMETRY,
- INVERTED INDEX geom_idx (geom)
-) LOCALITY REGIONAL BY ROW;
-```
-
-And you [insert]({% link {{ page.version.version }}/insert.md %}) some data into the tables:
-
-``` sql
-INSERT INTO t1 SELECT generate_series(1, 1000), 'POINT(1.0 1.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'us-east1', generate_series(1, 1000), 'POINT(1.0 1.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'us-west1', generate_series(1001, 2000), 'POINT(2.0 2.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'europe-west1', generate_series(2001, 3000), 'POINT(3.0 3.0)';
-```
-
-If you attempt a left join between `t1` and `t2` on only the geometry columns, CockroachDB will not be able to plan an [inverted join]({% link {{ page.version.version }}/joins.md %}#inverted-joins):
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom);
- info
-------------------------------------
- distribution: full
- vectorized: true
-
- • cross join (right outer)
- │ pred: st_contains(geom, geom)
- │
- ├── • scan
- │ estimated row count: 3,000
- │ table: t2@primary
- │ spans: FULL SCAN
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(15 rows)
-```
-
-However, if you constrain the `crdb_region` column to a single value, CockroachDB can plan an inverted join:
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-east1';
- info
---------------------------------------------------
- distribution: full
- vectorized: true
-
- • lookup join (left outer)
- │ table: t2@primary
- │ equality: (crdb_region, k) = (crdb_region,k)
- │ equality cols are key
- │ pred: st_contains(geom, geom)
- │
- └── • inverted join (left outer)
- │ table: t2@geom_idx
- │
- └── • render
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(18 rows)
-```
-
-If you do not know which region to use, you can combine queries with [`UNION ALL`]({% link {{ page.version.version }}/selection-queries.md %}#union-combine-two-queries):
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-east1'
-UNION ALL SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-west1'
-UNION ALL SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'europe-west1';
- info
-----------------------------------------------------------
- distribution: full
- vectorized: true
-
- • union all
- │
- ├── • union all
- │ │
- │ ├── • lookup join (left outer)
- │ │ │ table: t2@primary
- │ │ │ equality: (crdb_region, k) = (crdb_region,k)
- │ │ │ equality cols are key
- │ │ │ pred: st_contains(geom, geom)
- │ │ │
- │ │ └── • inverted join (left outer)
- │ │ │ table: t2@geom_idx
- │ │ │
- │ │ └── • render
- │ │ │
- │ │ └── • scan
- │ │ estimated row count: 1,000
- │ │ table: t1@primary
- │ │ spans: FULL SCAN
- │ │
- │ └── • lookup join (left outer)
- │ │ table: t2@primary
- │ │ equality: (crdb_region, k) = (crdb_region,k)
- │ │ equality cols are key
- │ │ pred: st_contains(geom, geom)
- │ │
- │ └── • inverted join (left outer)
- │ │ table: t2@geom_idx
- │ │
- │ └── • render
- │ │
- │ └── • scan
- │ estimated row count: 1,000
- │ table: t1@primary
- │ spans: FULL SCAN
- │
- └── • lookup join (left outer)
- │ table: t2@primary
- │ equality: (crdb_region, k) = (crdb_region,k)
- │ equality cols are key
- │ pred: st_contains(geom, geom)
- │
- └── • inverted join (left outer)
- │ table: t2@geom_idx
- │
- └── • render
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(54 rows)
-```
-
-[#59649](https://github.com/cockroachdb/cockroach/issues/59649)
-
-#### Locality optimized search limitations
-
-{% include {{page.version.version}}/known-limitations/locality-optimized-search-virtual-computed-columns.md %}
-{% include {{ page.version.version }}/known-limitations/locality-optimized-search-limited-records.md %}
-
-#### Query plans for materialized views
-
-{% include {{page.version.version}}/known-limitations/materialized-views-no-stats.md %}
-
-#### 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/migrate-from-oracle.md b/src/current/v25.4/migrate-from-oracle.md
index a62e9ae2c11..9368233f580 100644
--- a/src/current/v25.4/migrate-from-oracle.md
+++ b/src/current/v25.4/migrate-from-oracle.md
@@ -261,12 +261,12 @@ Use the table below for data type mappings:
When moving from Oracle to CockroachDB data types, consider the following:
-- [Schema changes within transactions]({% link {{ page.version.version }}/known-limitations.md %}#schema-changes-within-transactions)
+- [Schema changes within transactions]({% link {{ page.version.version }}/online-schema-changes.md %}#known-limitations)
- [Schema changes between executions of prepared statements]({% link {{ page.version.version }}/online-schema-changes.md %}#no-online-schema-changes-between-executions-of-prepared-statements)
- If [`JSON`]({% link {{ page.version.version }}/jsonb.md %}) columns are used only for payload, consider switching to [`BYTES`]({% link {{ page.version.version }}/bytes.md %}).
- Max size of a single [column family]({% link {{ page.version.version }}/column-families.md %}) (by default, the [maximum size of a range]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes)).
-For more information, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}), [Online Schema Changes]({% link {{ page.version.version }}/online-schema-changes.md %}), and [Transactions]({% link {{ page.version.version }}/transactions.md %}).
+For more information, refer to [Online Schema Changes]({% link {{ page.version.version }}/online-schema-changes.md %}) and [Transactions]({% link {{ page.version.version }}/transactions.md %}).
### NULLs
diff --git a/src/current/v25.4/node-shutdown.md b/src/current/v25.4/node-shutdown.md
index 6465879950a..f44cb6ee329 100644
--- a/src/current/v25.4/node-shutdown.md
+++ b/src/current/v25.4/node-shutdown.md
@@ -880,6 +880,10 @@ Most of the guidance in this page is most relevant to manual deployments, althou
You can adjust the [`server.shutdown.connections.timeout`](#server-shutdown-connections-timeout) setting for client applications or application servers that connect to CockroachDB {{ site.data.products.advanced }} clusters. Ensure that the connection pool maximum lifetime is shorter than that value, as per the [Cluster settings](#server-shutdown-connections-timeout) guidance.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/node-shutdown-limitations.md %}
+
## See also
- [Upgrade CockroachDB]({% link {{ page.version.version }}/upgrade-cockroach-version.md %})
diff --git a/src/current/v25.4/null-handling.md b/src/current/v25.4/null-handling.md
index 454240d5b8b..a84d2bfcd13 100644
--- a/src/current/v25.4/null-handling.md
+++ b/src/current/v25.4/null-handling.md
@@ -554,3 +554,7 @@ For example:
NULL
(1 row)
~~~
+
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/null-limitations.md %}
diff --git a/src/current/v25.4/partitioning.md b/src/current/v25.4/partitioning.md
index 6e0acd4b000..1a7392a6fb9 100644
--- a/src/current/v25.4/partitioning.md
+++ b/src/current/v25.4/partitioning.md
@@ -693,9 +693,7 @@ Other databases use partitioning for three additional use cases: secondary index
## Known limitations
-- {% include {{ page.version.version }}/known-limitations/partitioning-with-placeholders.md %}
-
-- {% include {{ page.version.version }}/known-limitations/drop-single-partition.md %}
+{% include {{ page.version.version }}/known-limitations/partition-limitations.md %}
## See also
diff --git a/src/current/v25.4/query-spatial-data.md b/src/current/v25.4/query-spatial-data.md
index 12bc119fe2c..26710368ce2 100644
--- a/src/current/v25.4/query-spatial-data.md
+++ b/src/current/v25.4/query-spatial-data.md
@@ -26,7 +26,7 @@ CockroachDB does not implement the full list of PostGIS built-in functions and o
If your application needs support for functions that are not yet implemented, check the [meta-issue for built-in function support on GitHub](https://github.com/cockroachdb/cockroach/issues/49203), which describes how to find an issue for the built-in function(s) you need.
-For a list of other known limitations, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations).
+For a list of other known limitations, refer to [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations).
### ORM compatibility
diff --git a/src/current/v25.4/savepoint.md b/src/current/v25.4/savepoint.md
index 725b8e35388..f89df9f38dd 100644
--- a/src/current/v25.4/savepoint.md
+++ b/src/current/v25.4/savepoint.md
@@ -289,6 +289,10 @@ Use the [`SHOW SAVEPOINT STATUS`]({% link {{ page.version.version }}/show-savepo
Note that the `is_initial_savepoint` column will be true if the savepoint is the outermost savepoint in the transaction.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/savepoint-limitations.md %}
+
## See also
- [`SHOW SAVEPOINT STATUS`]({% link {{ page.version.version }}/show-savepoint-status.md %})
diff --git a/src/current/v25.4/secure-a-cluster.md b/src/current/v25.4/secure-a-cluster.md
index e2819037b89..776b69b5d8d 100644
--- a/src/current/v25.4/secure-a-cluster.md
+++ b/src/current/v25.4/secure-a-cluster.md
@@ -314,7 +314,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v25.4/set-vars.md b/src/current/v25.4/set-vars.md
index 3ea6b4bc2a2..cb68d212746 100644
--- a/src/current/v25.4/set-vars.md
+++ b/src/current/v25.4/set-vars.md
@@ -459,6 +459,7 @@ When setting a time zone, note the following:
## Known Limitations
{% include {{page.version.version}}/known-limitations/set-transaction-no-rollback.md %}
+{% include {{ page.version.version }}/known-limitations/int-limitations.md %}
## See also
diff --git a/src/current/v25.4/simulate-a-multi-region-cluster-on-localhost.md b/src/current/v25.4/simulate-a-multi-region-cluster-on-localhost.md
index 59450587dba..1fcfeaf18a5 100644
--- a/src/current/v25.4/simulate-a-multi-region-cluster-on-localhost.md
+++ b/src/current/v25.4/simulate-a-multi-region-cluster-on-localhost.md
@@ -68,7 +68,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
To verify that the 9 nodes you specified are up and running as expected, go to the [**Cluster Overview**]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}) at http://localhost:8080/#/overview/list.
{{site.data.alerts.callout_info}}
-Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
To see which nodes are located in which regions, and to see the simulated latencies between them, go to the [**Network Diagnostics**]({% link {{ page.version.version }}/ui-network-latency-page.md %}) page at http://localhost:8080/#/reports/network/region
diff --git a/src/current/v25.4/spatial-data-overview.md b/src/current/v25.4/spatial-data-overview.md
index 9ab5a460200..ec183bdaad9 100644
--- a/src/current/v25.4/spatial-data-overview.md
+++ b/src/current/v25.4/spatial-data-overview.md
@@ -27,7 +27,7 @@ See the links below for more information about how to use CockroachDB for spatia
- [Spatial indexes]({% link {{ page.version.version }}/spatial-indexes.md %})
- [Spatial and GIS Glossary of Terms]({% link {{ page.version.version }}/architecture/glossary.md %})
-- [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations)
+- Refer to [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations)
- [Spatial functions]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions)
- [Client library compatibility]({% link {{ page.version.version }}/query-spatial-data.md %}#compatibility)
@@ -64,6 +64,10 @@ In addition to the [generated reference documentation for spatial functions]({%
- [`ST_Union`]({% link {{ page.version.version }}/st_union.md %})
- [`ST_Within`]({% link {{ page.version.version }}/st_within.md %})
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/spatial-limitations.md %}
+
## See also
- [Introducing Distributed Spatial Data in CockroachDB](https://www.cockroachlabs.com/blog/spatial-data/) (blog post)
diff --git a/src/current/v25.4/start-a-local-cluster-in-docker-windows.md b/src/current/v25.4/start-a-local-cluster-in-docker-windows.md
index 5d704a7b5d7..fd04acb4891 100644
--- a/src/current/v25.4/start-a-local-cluster-in-docker-windows.md
+++ b/src/current/v25.4/start-a-local-cluster-in-docker-windows.md
@@ -305,7 +305,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
@@ -326,7 +326,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v25.4/start-a-local-cluster.md b/src/current/v25.4/start-a-local-cluster.md
index a38f33f08a4..5a8e2f2cf07 100644
--- a/src/current/v25.4/start-a-local-cluster.md
+++ b/src/current/v25.4/start-a-local-cluster.md
@@ -259,7 +259,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v25.4/subqueries.md b/src/current/v25.4/subqueries.md
index 861623eeab8..08693c55589 100644
--- a/src/current/v25.4/subqueries.md
+++ b/src/current/v25.4/subqueries.md
@@ -123,6 +123,10 @@ In a `LATERAL` subquery join, the rows returned by the inner subquery are added
The results of scalar subqueries are loaded entirely into memory when the execution of the surrounding query starts. To prevent execution errors due to memory exhaustion, ensure that subqueries return as few results as possible.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/subquery-mutations-limitations.md %}
+
## See also
- [Selection Queries]({% link {{ page.version.version }}/selection-queries.md %})
diff --git a/src/current/v25.4/transactions.md b/src/current/v25.4/transactions.md
index 64cb8bcae84..86a32d0353b 100644
--- a/src/current/v25.4/transactions.md
+++ b/src/current/v25.4/transactions.md
@@ -236,6 +236,10 @@ The limits are enforced after each statement of a transaction has been fully exe
Enabling `transaction_rows_read_err` disables a performance optimization for mutation statements in implicit transactions where CockroachDB can auto-commit without additional network round trips.
{{site.data.alerts.end}}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/transaction-row-count-limitations.md %}
+
## See also
- [`BEGIN`]({% link {{ page.version.version }}/begin-transaction.md %})
diff --git a/src/current/v25.4/triggers.md b/src/current/v25.4/triggers.md
index 396754323c3..590edad8aac 100644
--- a/src/current/v25.4/triggers.md
+++ b/src/current/v25.4/triggers.md
@@ -67,7 +67,7 @@ CREATE TRIGGER audit_address_change
~~~
{{site.data.alerts.callout_info}}
-Due to a [known limitation]({% link {{ page.version.version }}/known-limitations.md %}#limitations-for-composite-types), `OLD` and `NEW` must be wrapped in parentheses when accessing column names.
+Due to a [known limitation]({% link {{ page.version.version }}/create-type.md %}#known-limitations), `OLD` and `NEW` must be wrapped in parentheses when accessing column names.
{{site.data.alerts.end}}
Only `OLD` can be referenced in the `WHEN` clause of a `DELETE` trigger, and only `NEW` in the `WHEN` clause of an `INSERT` trigger. `OLD` or `NEW` or both can be referenced in the `WHEN` clause of an `UPDATE` trigger. For details, refer to [Trigger variables](#trigger-variables).
diff --git a/src/current/v25.4/ui-overview.md b/src/current/v25.4/ui-overview.md
index 41d3c70f5f5..8afeb20fad1 100644
--- a/src/current/v25.4/ui-overview.md
+++ b/src/current/v25.4/ui-overview.md
@@ -91,6 +91,10 @@ You can access the DB Console from every node at `http://:`, or
For guidance on accessing the DB Console in the context of cluster deployment, see [Start a Local Cluster]({% link {{ page.version.version }}/start-a-local-cluster.md %}) and [Manual Deployment]({% link {{ page.version.version }}/manual-deployment.md %}).
+{{site.data.alerts.callout_danger}}
+Accessing the DB Console for a secure cluster requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
+{{site.data.alerts.end}}
+
### Proxy DB Console
If your CockroachDB cluster is behind a load balancer, you may wish to proxy your DB Console connection to a different node in the cluster from the node you first connect to. This is useful in deployments where a third-party load balancer otherwise determines which CockroachDB node you connect to in DB Console, or where web management access is limited to a subset of CockroachDB instances in a cluster.
diff --git a/src/current/v26.1/alter-sequence.md b/src/current/v26.1/alter-sequence.md
index 7d6b232e2aa..afea50171b5 100644
--- a/src/current/v26.1/alter-sequence.md
+++ b/src/current/v26.1/alter-sequence.md
@@ -246,6 +246,10 @@ SQLSTATE: 42P01
(1 row)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/alter-sequence-limitations.md %}
+
## See also
- [`CREATE SEQUENCE`]({% link {{ page.version.version }}/create-sequence.md %})
diff --git a/src/current/v26.1/alter-table.md b/src/current/v26.1/alter-table.md
index b4e6e7121bb..631cfe3343d 100644
--- a/src/current/v26.1/alter-table.md
+++ b/src/current/v26.1/alter-table.md
@@ -91,6 +91,10 @@ Parameter | Description |
For usage, see [Synopsis](#synopsis).
+#### Known limitations
+
+{% include {{ page.version.version }}/known-limitations/alter-table-add-column-limitations.md %}
+
### `ADD CONSTRAINT`
Use `ALTER TABLE ... ADD CONSTRAINT` to add the following [constraints]({% link {{ page.version.version }}/constraints.md %}) to columns:
diff --git a/src/current/v26.1/cluster-setup-troubleshooting.md b/src/current/v26.1/cluster-setup-troubleshooting.md
index 9972c334d98..850f9c7119a 100644
--- a/src/current/v26.1/cluster-setup-troubleshooting.md
+++ b/src/current/v26.1/cluster-setup-troubleshooting.md
@@ -223,6 +223,18 @@ To efficiently troubleshoot the issue, it's important to understand where and wh
Again, firewalls or hostname issues can cause any of these steps to fail.
+#### TCP connection lingering
+
+If there is no host at the target IP address, or if a firewall rule blocks traffic to the target address and port, a [TCP handshake can linger](https://github.com/cockroachdb/cockroach/issues/53410) while the client network stack waits for a TCP packet in response to network requests.
+
+**Explanation:** 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. However, the scenario described above can cause connections to hang instead of failing immediately.
+
+**Solution:** To work around this scenario:
+
+- When migrating a node to a new machine, keep the server listening at the previous IP address until the cluster has completed the migration.
+- Configure any active network firewalls to allow node-to-node traffic.
+- Verify that orchestration tools (e.g., Kubernetes) are configured to use the correct network connection information.
+
#### Network partition
If the DB Console
diff --git a/src/current/v26.1/cockroach-sql.md b/src/current/v26.1/cockroach-sql.md
index 24601a20354..14f896f8d78 100644
--- a/src/current/v26.1/cockroach-sql.md
+++ b/src/current/v26.1/cockroach-sql.md
@@ -176,6 +176,10 @@ The **Version** and **Cluster ID** details are particularly noteworthy:
{% include {{ page.version.version }}/sql/sql-examples.md %}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/sql-input-size-limitations.md %}
+
## See also
- [Client Connection Parameters]({% link {{ page.version.version }}/connection-parameters.md %})
diff --git a/src/current/v26.1/cockroach-start.md b/src/current/v26.1/cockroach-start.md
index 2bec1c357e2..831f0a9e449 100644
--- a/src/current/v26.1/cockroach-start.md
+++ b/src/current/v26.1/cockroach-start.md
@@ -189,6 +189,20 @@ For another multi-region example, see [Start a multi-region cluster](#start-a-mu
For more information about how to use CockroachDB's multi-region capabilities, see the [Multi-Region Capabilities Overview]({% link {{ page.version.version }}/multiregion-overview.md %}).
+#### Load-based lease rebalancing in uneven latency deployments
+
+When nodes are started with the `--locality` flag, CockroachDB attempts to place the replica lease holder (the replica that client requests are forwarded to) on the node closest to the source of the request. This means as client requests move geographically, so too does the replica lease holder.
+
+However, you might see increased latency caused by a consistently high rate of lease transfers between datacenters in the following case:
+
+- Your cluster runs in datacenters which are very different distances away from each other.
+- Each node was started with a single tier of `--locality`, e.g., `--locality=datacenter=a`.
+- Most client requests get sent to a single datacenter because that's where all your application traffic is.
+
+To detect if this is happening, open the [DB Console]({% link {{ page.version.version }}/ui-overview.md %}), select the **Queues** dashboard, hover over the **Replication Queue** graph, and check the **Leases Transferred / second** data point. If the value is consistently larger than 0, you should consider stopping and restarting each node with additional tiers of locality to improve request latency.
+
+For example, let's say that latency is 10ms from nodes in datacenter A to nodes in datacenter B but is 100ms from nodes in datacenter A to nodes in datacenter C. To ensure A's and B's relative proximity is factored into lease holder rebalancing, you could restart the nodes in datacenter A and B with a common region, `--locality=region=foo,datacenter=a` and `--locality=region=foo,datacenter=b`, while restarting nodes in datacenter C with a different region, `--locality=region=bar,datacenter=c`.
+
### Storage
- [Storage engine](#storage-engine)
diff --git a/src/current/v26.1/collate.md b/src/current/v26.1/collate.md
index f76379f68f4..90d0b2326f6 100644
--- a/src/current/v26.1/collate.md
+++ b/src/current/v26.1/collate.md
@@ -239,6 +239,10 @@ This is equivalent to:
(1 row)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/collate-limitations.md %}
+
## See also
[Data Types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v26.1/column-families.md b/src/current/v26.1/column-families.md
index 240201140a3..6a7f013e5d6 100644
--- a/src/current/v26.1/column-families.md
+++ b/src/current/v26.1/column-families.md
@@ -88,6 +88,10 @@ When using the [`ALTER TABLE .. ADD COLUMN`]({% link {{ page.version.version }}/
> ALTER TABLE test ADD COLUMN last_name STRING;
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/column-family-limitations.md %}
+
## See also
- [`CREATE TABLE`]({% link {{ page.version.version }}/create-table.md %})
diff --git a/src/current/v26.1/comment-on.md b/src/current/v26.1/comment-on.md
index 8625702e1a6..613389b23d3 100644
--- a/src/current/v26.1/comment-on.md
+++ b/src/current/v26.1/comment-on.md
@@ -258,6 +258,10 @@ To remove the comment from the type you created in the [preceding example](#add-
COMMENT ON TYPE my_point IS NULL;
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/comment-on-limitations.md %}
+
## See also
- [`CREATE DATABASE`]({% link {{ page.version.version }}/create-database.md %})
diff --git a/src/current/v26.1/computed-columns.md b/src/current/v26.1/computed-columns.md
index e6cabb5fe13..dca41a6c19e 100644
--- a/src/current/v26.1/computed-columns.md
+++ b/src/current/v26.1/computed-columns.md
@@ -105,6 +105,10 @@ For more information, see [`ADD COLUMN`]({% link {{ page.version.version }}/alte
If the computed column controls row locality in a [`REGIONAL BY ROW`]({% link {{ page.version.version }}/table-localities.md %}#regional-by-row-tables) table (for example, using a custom [`crdb_internal_region`]({% link {{ page.version.version }}/alter-table.md %}#crdb_region) column with `REGIONAL BY ROW AS`), you can change its expression by following the steps in [Modify the region column or its expression]({% link {{ page.version.version }}/alter-table.md %}#modify-rbr-region-column).
{{site.data.alerts.end}}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/max-row-size-limitations.md %}
+
## See also
- [Scalar Expressions]({% link {{ page.version.version }}/scalar-expressions.md %})
diff --git a/src/current/v26.1/connection-pooling.md b/src/current/v26.1/connection-pooling.md
index 9c8f1ab35d6..9b7c2dfebfc 100644
--- a/src/current/v26.1/connection-pooling.md
+++ b/src/current/v26.1/connection-pooling.md
@@ -237,3 +237,7 @@ defer dbpool.Close()
For a full list of connection pool configuration parameters for pgxpool, see [the pgxpool documentation](https://pkg.go.dev/github.com/jackc/pgx/v5/pgxpool#Config).
+
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/client-connections-limitations.md %}
diff --git a/src/current/v26.1/create-table.md b/src/current/v26.1/create-table.md
index e14849f0f2c..5b798b4d1f7 100644
--- a/src/current/v26.1/create-table.md
+++ b/src/current/v26.1/create-table.md
@@ -155,7 +155,7 @@ If you use `GENERATED BY DEFAULT AS IDENTITY` to define the identity column, any
Note the following limitations of identity columns:
-- `GENERATED ALWAYS AS IDENTITY`/`GENERATED BY DEFAULT AS IDENTITY` is supported in [`ALTER TABLE ... ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statements only when the table being altered is empty, as [CockroachDB does not support back-filling sequential column data]({% link {{ page.version.version }}/known-limitations.md %}#adding-a-column-with-sequence-based-default-values). For more information, see [#42508](https://github.com/cockroachdb/cockroach/issues/42508).
+- `GENERATED ALWAYS AS IDENTITY`/`GENERATED BY DEFAULT AS IDENTITY` is supported in [`ALTER TABLE ... ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statements only when the table being altered is empty. Refer to [`ALTER TABLE ... ADD COLUMN` known limitations]({% link {{ page.version.version }}/alter-table.md %}#add-column).
- Unlike PostgreSQL, CockroachDB does not support using the `OVERRIDING SYSTEM VALUE` clause in `INSERT`/`UPDATE`/`UPSERT` statements to overwrite `GENERATED ALWAYS AS IDENTITY` identity column values.
For an example of an identity column, see [Create a table with an identity column](#create-a-table-with-an-identity-column).
diff --git a/src/current/v26.1/create-type.md b/src/current/v26.1/create-type.md
index 5ba82d1bf31..f58107927df 100644
--- a/src/current/v26.1/create-type.md
+++ b/src/current/v26.1/create-type.md
@@ -194,6 +194,10 @@ SELECT * FROM points ORDER BY ((p).x) ASC LIMIT 25;
(25 rows)
~~~
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/composite-type-limitations.md %}
+
## See also
- [Data types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v26.1/deployment-operations-skills-taxonomy.md b/src/current/v26.1/deployment-operations-skills-taxonomy.md
index 151fd3fe0a5..27308a68be6 100644
--- a/src/current/v26.1/deployment-operations-skills-taxonomy.md
+++ b/src/current/v26.1/deployment-operations-skills-taxonomy.md
@@ -27,7 +27,7 @@ This section covers how to ensure that your hardware and network are properly co
- [Verify vCPU, RAM, storage, and disk IOPS performance]({% link {{ page.version.version }}/recommended-production-settings.md %}#hardware)
- [Configure time synchronization with NTP server]({% link {{ page.version.version }}/deploy-cockroachdb-on-premises.md %}#step-1-synchronize-clocks)
-- [Validate network connectivity]({% link {{ page.version.version }}/known-limitations.md %}#cockroachdb-does-not-test-for-all-connection-failure-scenarios)
+- [Validate network connectivity]({% link {{ page.version.version }}/cluster-setup-troubleshooting.md %}#tcp-connection-lingering)
## Security
diff --git a/src/current/v26.1/export-spatial-data.md b/src/current/v26.1/export-spatial-data.md
index c06ebe6062d..5f4ba3a0640 100644
--- a/src/current/v26.1/export-spatial-data.md
+++ b/src/current/v26.1/export-spatial-data.md
@@ -102,7 +102,7 @@ This can be addressed in one of the following ways:
- [Spatial Data Overview]({% link {{ page.version.version }}/spatial-data-overview.md %})
- [Spatial indexes]({% link {{ page.version.version }}/spatial-indexes.md %})
- [Spatial and GIS Glossary of Terms]({% link {{ page.version.version }}/architecture/glossary.md %})
-- [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations)
+- [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations)
- [Spatial functions]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions)
- [POINT]({% link {{ page.version.version }}/point.md %})
- [LINESTRING]({% link {{ page.version.version }}/linestring.md %})
diff --git a/src/current/v26.1/int.md b/src/current/v26.1/int.md
index 0a2250fc220..a3929153932 100644
--- a/src/current/v26.1/int.md
+++ b/src/current/v26.1/int.md
@@ -105,6 +105,10 @@ Type | Details
`INTERVAL` | Converts to seconds.
`STRING` | ––
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/int-limitations.md %}
+
## See also
- [Data Types]({% link {{ page.version.version }}/data-types.md %})
diff --git a/src/current/v26.1/inverted-indexes.md b/src/current/v26.1/inverted-indexes.md
index 6ca9524104b..d324ae32a01 100644
--- a/src/current/v26.1/inverted-indexes.md
+++ b/src/current/v26.1/inverted-indexes.md
@@ -392,6 +392,10 @@ For an example showing how to create a full-text index on a [`TSVECTOR`]({% link
{% include {{ page.version.version }}/sql/inverted-joins.md %}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/inverted-index-limitations.md %}
+
## See also
- [Indexes]({% link {{ page.version.version }}/indexes.md %})
diff --git a/src/current/v26.1/joins.md b/src/current/v26.1/joins.md
index 81de855c725..b72ddca83a4 100644
--- a/src/current/v26.1/joins.md
+++ b/src/current/v26.1/joins.md
@@ -185,6 +185,10 @@ If you see an `apply-join`, it means the optimizer was not able to perform de-co
- Use [`EXPLAIN`]({% link {{ page.version.version }}/explain.md %}) over queries containing joins to verify that indexes are used.
- Use [indexes]({% link {{ page.version.version }}/indexes.md %}) for faster joins.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/inverted-index-limitations.md %}
+
## See also
- [Join hints]({% link {{ page.version.version }}/cost-based-optimizer.md %}#join-hints)
diff --git a/src/current/v26.1/known-limitations.md b/src/current/v26.1/known-limitations.md
deleted file mode 100644
index 992d0738147..00000000000
--- a/src/current/v26.1/known-limitations.md
+++ /dev/null
@@ -1,748 +0,0 @@
----
-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
-docs_area: releases
----
-
-{% assign previous_version = site.data.versions | where_exp: "previous_version", "previous_version.major_version == page.version.version" | map: "previous_version" | first %}
-
-## New limitations in {{ page.version.version }}
-
-This section describes newly identified limitations in CockroachDB {{ page.version.version }}.
-
-### View support
-
-{% include {{ page.version.version }}/known-limitations/view-limitations.md %}
-
-### User-defined functions
-
-- 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
-
-- Pausable portals are not supported with `CALL` statements for stored procedures. [#151529](https://github.com/cockroachdb/cockroach/issues/151529)
-
-### 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#issuecomment-3222083180)
-
-### Data domiciling
-
-- 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
-
-This section describes limitations from previous CockroachDB versions that still impact {{ page.version.version }}.
-
-### SQL statements
-
-#### Syntax and behavior differences from PostgreSQL
-
-CockroachDB supports the [PostgreSQL wire protocol](https://www.postgresql.org/docs/current/protocol.html) and the majority of its syntax. For a list of known differences in syntax and behavior between CockroachDB and PostgreSQL, see [Features that differ from PostgreSQL]({% link {{ page.version.version }}/postgresql-compatibility.md %}#features-that-differ-from-postgresql).
-
-#### JSONPath limitations
-
-{% include {{ page.version.version }}/known-limitations/jsonpath-limitations.md %}
-
-#### `AS OF SYSTEM TIME` limitations
-
-- {% include {{ page.version.version }}/known-limitations/aost-limitations.md %}
-- {% include {{ page.version.version }}/known-limitations/create-statistics-aost-limitation.md %}
-
-#### `COPY` syntax not supported by CockroachDB
-
-{% include {{ page.version.version }}/known-limitations/copy-syntax.md %}
-
-#### `IMPORT INTO` limitations
-
-{% include {{ page.version.version }}/known-limitations/import-into-limitations.md %}
-
-#### `ALTER VIEW` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-view-limitations.md %}
-
-#### Row-Level TTL limitations
-
-{% include {{page.version.version}}/known-limitations/row-level-ttl-limitations.md %}
-
-#### `CAST` expressions containing a subquery with an `ENUM` target are not supported
-
-Casting subqueries to ENUMs in views and UDFs is not supported. [#108184](https://github.com/cockroachdb/cockroach/issues/108184)
-
-#### Statements containing multiple modification subqueries of the same table are disallowed
-
-Statements containing multiple modification subqueries mutating the same row could cause corruption. These statements are disallowed by default, but you can enable multiple modification subqueries with one the following:
-
-- Set the `sql.multiple_modifications_of_table.enabled` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) to `true`.
-- Use the `enable_multiple_modifications_of_table` [session variable]({% link {{ page.version.version }}/set-vars.md %}).
-
-If multiple mutations inside the same statement affect different tables with [`FOREIGN KEY`]({% link {{ page.version.version }}/foreign-key.md %}) relations and `ON CASCADE` clauses between them, the results will be different from what is expected in PostgreSQL. [#70731](https://github.com/cockroachdb/cockroach/issues/70731)
-
-#### Using `default_int_size` session variable in batch of statements
-
-When setting the `default_int_size` [session variable]({% link {{ page.version.version }}/set-vars.md %}) in a batch of statements such as `SET default_int_size='int4'; SELECT 1::IN`, the `default_int_size` variable will not take effect until the next statement. Statement parsing is asynchronous with statement execution.
-
-As a workaround, set `default_int_size` via your database driver, or ensure that `SET default_int_size` is in its own statement. [#32846](https://github.com/cockroachdb/cockroach/issues/32846)
-
-#### Overload resolution for collated strings
-
-Many string operations are not properly overloaded for [collated strings]({% link {{ page.version.version }}/collate.md %}), for example:
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> SELECT 'string1' || 'string2';
-~~~
-
-~~~
- ?column?
-------------------
- string1string2
-(1 row)
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> SELECT ('string1' collate en) || ('string2' collate en);
-~~~
-
-~~~
-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)
-
-#### `null_ordered_last` does not produce correct results with tuples
-
-By default, CockroachDB orders `NULL`s before all other values. For compatibility with PostgreSQL, the `null_ordered_last` [session variable]({% link {{ page.version.version }}/set-vars.md %}) was added, which changes the default to order `NULL` values after all other values. This works in most cases, due to some transformations CockroachDB makes in the optimizer to add extra ordering columns. However, it does not work when the ordering column is a tuple. [#93558](https://github.com/cockroachdb/cockroach/issues/93558)
-
-### Functions and procedures
-
-#### PL/pgSQL support
-
-{% include {{ page.version.version }}/known-limitations/plpgsql-limitations.md %}
-
-#### UDF and stored procedure support
-
-{% include {{ page.version.version }}/known-limitations/routine-limitations.md %}
-{% include {{ page.version.version }}/known-limitations/stored-proc-limitations.md %}
-{% include {{ page.version.version }}/known-limitations/udf-limitations.md %}
-
-### Triggers
-
-{% include {{ page.version.version }}/known-limitations/trigger-limitations.md %}
-
-### Transactions
-
-#### Read Committed features and performance
-
-[Read Committed isolation]({% link {{ page.version.version }}/read-committed.md %}) has the following limitations:
-
-{% include {{ page.version.version }}/known-limitations/read-committed-limitations.md %}
-
-#### Follower reads
-
-{% include {{ page.version.version }}/known-limitations/follower-reads-limitations.md %}
-
-#### `SELECT FOR UPDATE` locks are dropped on lease transfers and range splits/merges
-
-{% include {{page.version.version}}/known-limitations/select-for-update-limitations.md %}
-
-#### `SET` does not `ROLLBACK` in a transaction
-
-{% include {{page.version.version}}/known-limitations/set-transaction-no-rollback.md %}
-
-#### `ROLLBACK TO SAVEPOINT` in high-priority transactions containing DDL
-1
-Transactions with [priority `HIGH`]({% link {{ page.version.version }}/transactions.md %}#transaction-priorities) that contain DDL and `ROLLBACK TO SAVEPOINT` are not supported, as they could result in a deadlock. For example:
-
-~~~ sql
-> BEGIN PRIORITY HIGH; SAVEPOINT s; CREATE TABLE t(x INT); ROLLBACK TO SAVEPOINT s;
-~~~
-
-~~~
-ERROR: unimplemented: cannot use ROLLBACK TO SAVEPOINT in a HIGH PRIORITY transaction containing DDL
-SQLSTATE: 0A000
-HINT: You have attempted to use a feature that is not yet implemented.
-See: https://github.com/cockroachdb/cockroach/issues/46414
-~~~
-
-[#46414](https://github.com/cockroachdb/cockroach/issues/46414)
-
-#### `CANCEL JOB` limitations
-
-{% include {{ page.version.version }}/known-limitations/cancel-job-limitations.md %}
-
-#### SQL cursor support
-
-{% include {{page.version.version}}/known-limitations/sql-cursors.md %}
-
-#### Materialized views inside transactions
-
-{% include {{page.version.version}}/known-limitations/cannot-refresh-materialized-views-inside-transactions.md %}
-
-### Schemas and indexes
-
-#### Vector index limitations
-
-{% include {{ page.version.version }}/known-limitations/vector-limitations.md %}
-
-#### Online schema change limitations
-
-{% include {{ page.version.version }}/known-limitations/online-schema-changes-limitations.md %}
-
-#### Adding a column with sequence-based `DEFAULT` values
-
-It is currently not possible to [add a column]({% link {{ page.version.version }}/alter-table.md %}#add-column) to a table when the column uses a [sequence]({% link {{ page.version.version }}/create-sequence.md %}) as the [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) value, for example:
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> CREATE TABLE t (x INT);
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> INSERT INTO t(x) VALUES (1), (2), (3);
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> CREATE SEQUENCE s;
-~~~
-
-{% include_cached copy-clipboard.html %}
-~~~ sql
-> ALTER TABLE t ADD COLUMN y INT DEFAULT nextval('s');
-~~~
-
-~~~
-ERROR: failed to construct index entries during backfill: nextval(): unimplemented: cannot evaluate scalar expressions containing sequence operations in this context
-SQLSTATE: 0A000
-HINT: You have attempted to use a feature that is not yet implemented.
-See: https://go.crdb.dev/issue-v/42508/v24.2
-~~~
-
-[#42508](https://github.com/cockroachdb/cockroach/issues/42508)
-
-#### Dropping a column referenced by a partial index
-
-{% include {{ page.version.version }}/known-limitations/drop-column-partial-index.md %}
-
-#### Schema change DDL statements inside a multi-statement transaction can fail while other statements succeed
-
-{% include {{ page.version.version }}/known-limitations/schema-change-ddl-inside-multi-statement-transactions.md %}
-
-#### Schema changes between executions of prepared statements
-
-{% include {{ page.version.version }}/known-limitations/schema-changes-between-prepared-statements.md %}
-
-#### New values generated by `DEFAULT` expressions during `ALTER TABLE ADD COLUMN`
-
-When executing an [`ALTER TABLE ADD COLUMN`]({% link {{ page.version.version }}/alter-table.md %}#add-column) statement with a [`DEFAULT`]({% link {{ page.version.version }}/default-value.md %}) expression, new values generated:
-
-- use the default [search path]({% link {{ page.version.version }}/sql-name-resolution.md %}#search-path) regardless of the search path configured in the current session via `SET SEARCH_PATH`.
-- use the UTC time zone regardless of the time zone configured in the current session via [`SET TIME ZONE`]({% link {{ page.version.version }}/set-vars.md %}).
-- have no default database regardless of the default database configured in the current session via [`SET DATABASE`]({% link {{ page.version.version }}/set-vars.md %}), so you must specify the database of any tables they reference.
-- use the transaction timestamp for the `statement_timestamp()` function regardless of the time at which the `ALTER` statement was issued.
-
-#### Some column-dropping schema changes do not roll back properly
-
-Some [schema changes]({% link {{ page.version.version }}/online-schema-changes.md %}) that [drop columns]({% link {{ page.version.version }}/alter-table.md %}#drop-column) cannot be [rolled back]({% link {{ page.version.version }}/rollback-transaction.md %}) properly.
-
-In some cases, the rollback will succeed, but the column data might be partially or totally missing, or stale due to the asynchronous nature of the schema change. [#46541](https://github.com/cockroachdb/cockroach/issues/46541)
-
-In other cases, the rollback will fail in such a way that will never be cleaned up properly, leaving the table descriptor in a state where no other schema changes can be run successfully. [#47712](https://github.com/cockroachdb/cockroach/issues/47712)
-
-To reduce the chance that a column drop will roll back incorrectly:
-
-- Perform column drops in transactions separate from other schema changes. This ensures that other schema change failures will not cause the column drop to be rolled back.
-
-- Drop all [constraints]({% link {{ page.version.version }}/constraints.md %}) (including [unique indexes]({% link {{ page.version.version }}/unique.md %})) on the column in a separate transaction, before dropping the column.
-
-- Drop any [default values]({% link {{ page.version.version }}/default-value.md %}) or [computed expressions]({% link {{ page.version.version }}/computed-columns.md %}) on a column before attempting to drop the column. This prevents conflicts between constraints and default/computed values during a column drop rollback.
-
-If you think a rollback of a column-dropping schema change has occurred, check the [jobs table]({% link {{ page.version.version }}/show-jobs.md %}). Schema changes with an error prefaced by `cannot be reverted, manual cleanup may be required` might require manual intervention.
-
-#### `ALTER COLUMN` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-column-limitations.md %}
-
-#### `CREATE TABLE AS` limitations
-
-{% include {{ page.version.version }}/known-limitations/create-table-as-limitations.md %}
-
-#### Remove a `UNIQUE` index created as part of `CREATE TABLE`
-
-{% include {{ page.version.version }}/known-limitations/drop-unique-index-from-create-table.md %}
-
-#### Max size of a single column family
-
-When creating or updating a row, if the combined size of all values in a single [column family]({% link {{ page.version.version }}/column-families.md %}) exceeds the [max range size]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes) for the table, the operation may fail, or cluster performance may suffer.
-
-As a workaround, you can either [manually split a table's columns into multiple column families]({% link {{ page.version.version }}/column-families.md %}#manual-override), or you can [create a table-specific zone configuration]({% link {{ page.version.version }}/configure-replication-zones.md %}#create-a-replication-zone-for-a-table) with an increased max range size.
-
-#### Dropping a single partition
-
-{% include {{ page.version.version }}/known-limitations/drop-single-partition.md %}
-
-#### Placeholders in `PARTITION BY`
-
-{% include {{ page.version.version }}/known-limitations/partitioning-with-placeholders.md %} [#19464](https://github.com/cockroachdb/cockroach/issues/19464)
-
-#### Unsupported trigram syntax
-
-The following PostgreSQL syntax and features are currently unsupported for [trigrams]({% link {{ page.version.version }}/trigram-indexes.md %}):
-
-{% include {{ page.version.version }}/known-limitations/trigram-unsupported-syntax.md %}
-
-#### Unsupported full-text search features
-
-The following PostgreSQL syntax and features are currently unsupported for [full-text search]({% link {{ page.version.version }}/full-text-search.md %}):
-
-{% include {{ page.version.version }}/known-limitations/full-text-search-unsupported.md %}
-
-#### CockroachDB does not allow inverted indexes with `STORING`
-
-CockroachDB does not allow inverted indexes with a [`STORING` column]({% link {{ page.version.version }}/create-index.md %}#store-columns). [#88278](https://github.com/cockroachdb/cockroach/issues/88278)
-
-#### Multiple arbiter indexes for `INSERT ON CONFLICT DO UPDATE`
-
-{% include {{ page.version.version }}/known-limitations/multiple-arbiter-indexes.md %}
-
-#### Expression index limitations
-
-{% include {{ page.version.version }}/known-limitations/expression-index-limitations.md %}
-
-### Data types
-
-#### `CITEXT` limitations
-
-{% include {{ page.version.version }}/known-limitations/citext-limitations.md %}
-
-#### Spatial support limitations
-
-CockroachDB supports efficiently storing and querying [spatial data]({% link {{ page.version.version }}/export-spatial-data.md %}), with the following limitations:
-
-- Not all [PostGIS spatial functions](https://postgis.net/docs/reference.html) are supported. [#49203](https://github.com/cockroachdb/cockroach/issues/49203)
-
-- The `AddGeometryColumn` [spatial function]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions) only allows constant arguments. [#49402](https://github.com/cockroachdb/cockroach/issues/49402)
-
-- The `AddGeometryColumn` spatial function only allows the `true` value for its `use_typmod` parameter. [#49448](https://github.com/cockroachdb/cockroach/issues/49448)
-
-- CockroachDB does not support the `@` operator. Instead of using `@` in spatial expressions, we recommend using the inverse, with `~`. For example, instead of `a @ b`, use `b ~ a`. [#56124](https://github.com/cockroachdb/cockroach/issues/56124)
-
-- CockroachDB does not yet support [`INSERT`]({% link {{ page.version.version }}/insert.md %})s into the [`spatial_ref_sys` table]({% link {{ page.version.version }}/architecture/glossary.md %}#spatial-system-tables). This limitation also blocks the [`ogr2ogr -f PostgreSQL` file conversion command](https://gdal.org/programs/ogr2ogr.html#cmdoption-ogr2ogr-f). [#55903](https://github.com/cockroachdb/cockroach/issues/55903)
-
-- CockroachDB does not yet support [k-nearest neighbors](https://wikipedia.org/wiki/K-nearest_neighbors_algorithm). [#55227](https://github.com/cockroachdb/cockroach/issues/55227)
-
-- CockroachDB does not support using [schema name prefixes]({% link {{ page.version.version }}/sql-name-resolution.md %}#how-name-resolution-works) to refer to [data types]({% link {{ page.version.version }}/data-types.md %}) with type modifiers (e.g., `public.geometry(linestring, 4326)`). Instead, use fully-unqualified names to refer to data types with type modifiers (e.g., `geometry(linestring,4326)`). [#56492](https://github.com/cockroachdb/cockroach/issues/56492)
-
-- {% 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).
-
-#### Limitations for composite types
-
-- {% include {{page.version.version}}/cdc/types-udt-composite-general.md %} The following limitations apply:
- - {% include {{page.version.version}}/cdc/avro-udt-composite.md %}
- - {% include {{page.version.version}}/cdc/csv-udt-composite.md %}
-
-- Updating subfields of composite types using dot syntax results in a syntax error. [#102984](https://github.com/cockroachdb/cockroach/issues/102984)
-
-- Tuple elements cannot be accessed without enclosing the [composite variable]({% link {{ page.version.version }}/create-type.md %}#create-a-composite-data-type) name in parentheses. For example, `(OLD).column` and `(NEW).column` when used in [triggers]({% link {{ page.version.version }}/triggers.md %}). [#114687](https://github.com/cockroachdb/cockroach/issues/114687)
-
-#### `ALTER TYPE` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-type-limitations.md %}
-
-#### `JSONB` limitations
-
-{% include {{ page.version.version }}/known-limitations/jsonb-limitations.md %}
-
-### Security and privileges
-
-#### Row-level security
-
-- {% 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
-
-{% include {{ page.version.version }}/known-limitations/grant-revoke-schema-changes.md %}
-
-#### `DROP OWNED BY` limitations
-
-{% include {{page.version.version}}/known-limitations/drop-owned-by-limitations.md %}
-
-#### Privileges for `DELETE` and `UPDATE`
-
-Every [`DELETE`]({% link {{ page.version.version }}/delete.md %}) or [`UPDATE`]({% link {{ page.version.version }}/update.md %}) statement constructs a `SELECT` statement, even when no `WHERE` clause is involved. As a result, the user executing `DELETE` or `UPDATE` requires both the `DELETE` and `SELECT` or `UPDATE` and `SELECT` [privileges]({% link {{ page.version.version }}/security-reference/authorization.md %}#managing-privileges) on the table.
-
-### Deployment and operations
-
-#### Admission control
-
-{% include {{ page.version.version }}/known-limitations/admission-control-limitations.md %}
-
-#### Data domiciling
-
-{% 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.
-
-However, if there is no host at the target IP address, or if a firewall rule blocks traffic to the target address and port, a TCP handshake can linger while the client network stack waits for a TCP packet in response to network requests. To work around this kind of scenario, we recommend the following:
-
-- When migrating a node to a new machine, keep the server listening at the previous IP address until the cluster has completed the migration.
-- Configure any active network firewalls to allow node-to-node traffic.
-- Verify that orchestration tools (e.g., Kubernetes) are configured to use the correct network connection information.
-
-[#53410](https://github.com/cockroachdb/cockroach/issues/53410)
-
-#### No guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if `node decommission` is interrupted
-
-There is no guaranteed state switch from `DECOMMISSIONING` to `DECOMMISSIONED` if [`node decommission`]({% link {{ page.version.version }}/cockroach-node.md %}) is interrupted in one of the following ways:
-
-- The `cockroach node decommission --wait-all` command was run and then interrupted
-- The `cockroach node decommission --wait=none` command was run
-
-This is because the state flip is effected by the CLI program at the end. Only the CLI (or its underlying API call) is able to finalize the "decommissioned" state. If the command is interrupted, or `--wait=none` is used, the state will only flip to "decommissioned" when the CLI program is run again after decommissioning has done all its work. [#94430](https://github.com/cockroachdb/cockroach/issues/94430)
-
-#### Simultaneous client connections and running queries on a single node
-
-When a node has both a high number of client connections and running queries, the node may crash due to memory exhaustion. This is due to CockroachDB not accurately limiting the number of clients and queries based on the amount of available RAM on the node.
-
-To prevent memory exhaustion, monitor each node's memory usage and ensure there is some margin between maximum CockroachDB memory usage and available system RAM. For more details about memory usage in CockroachDB, see [this blog post](https://www.cockroachlabs.com/blog/memory-usage-cockroachdb/).
-
-{% include {{page.version.version}}/sql/server-side-connection-limit.md %} This may be useful in addition to your memory monitoring.
-
-#### Load-based lease rebalancing in uneven latency deployments
-
-When nodes are started with the [`--locality`]({% link {{ page.version.version }}/cockroach-start.md %}#flags) flag, CockroachDB attempts to place the replica lease holder (the replica that client requests are forwarded to) on the node closest to the source of the request. This means as client requests move geographically, so too does the replica lease holder.
-
-However, you might see increased latency caused by a consistently high rate of lease transfers between datacenters in the following case:
-
-- Your cluster runs in datacenters which are very different distances away from each other.
-- Each node was started with a single tier of `--locality`, e.g., `--locality=datacenter=a`.
-- Most client requests get sent to a single datacenter because that's where all your application traffic is.
-
-To detect if this is happening, open the [DB Console]({% link {{ page.version.version }}/ui-overview.md %}), select the **Queues** dashboard, hover over the **Replication Queue** graph, and check the **Leases Transferred / second** data point. If the value is consistently larger than 0, you should consider stopping and restarting each node with additional tiers of locality to improve request latency.
-
-For example, let's say that latency is 10ms from nodes in datacenter A to nodes in datacenter B but is 100ms from nodes in datacenter A to nodes in datacenter C. To ensure A's and B's relative proximity is factored into lease holder rebalancing, you could restart the nodes in datacenter A and B with a common region, `--locality=region=foo,datacenter=a` and `--locality=region=foo,datacenter=b`, while restarting nodes in datacenter C with a different region, `--locality=region=bar,datacenter=c`.
-
-#### Size limits on statement input from SQL clients
-
-CockroachDB imposes a hard limit of 16MiB on the data input for a single statement passed to CockroachDB from a client (including the SQL shell). We do not recommend attempting to execute statements from clients with large input.
-
-#### Using `\|` to perform a large input in the SQL shell
-
-In the [built-in SQL shell]({% link {{ page.version.version }}/cockroach-sql.md %}), using the [`\|`]({% link {{ page.version.version }}/cockroach-sql.md %}#commands) operator to perform a large number of inputs from a file can cause the server to close the connection. This is because `\|` sends the entire file as a single query to the server, which can exceed the upper bound on the size of a packet the server can accept from any client (16MB).
-
-As a workaround, [execute the file from the command line]({% link {{ page.version.version }}/cockroach-sql.md %}#execute-sql-statements-from-a-file) with `cat data.sql | cockroach sql` instead of from within the interactive shell.
-
-#### Spatial features disabled for ARM Macs
-
-[Spatial features]({% link {{ page.version.version }}/spatial-data-overview.md %}) are disabled due to an issue with macOS code signing for the [GEOS](https://libgeos.org/) libraries. Users needing spatial features on an ARM Mac may instead [use Rosetta](https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta) to [run the Intel binary]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#install-binary) or use the [Docker image]({% link {{ page.version.version }}/install-cockroachdb-mac.md %}#use-docker) distribution. [GitHub tracking issue](https://github.com/cockroachdb/cockroach/issues/93161)
-
-#### Logging system limitations
-
-{% include {{ page.version.version }}/known-limitations/logging-limitations.md %}
-
-#### Per-replica circuit breaker limitations
-
-{% include {{ page.version.version }}/known-limitations/per-replica-circuit-breaker-limitations.md %}
-
-#### Kubernetes limitations
-
-Refer to [Kubernetes best practices]({% link {{ page.version.version }}/deploy-cockroachdb-with-kubernetes.md %}#best-practices).
-
-### Observability
-
-#### Datadog
-
-{% include {{ page.version.version }}/known-limitations/datadog-self-hosted-limitations.md %}
-
-#### DB Console may become inaccessible for secure clusters
-
-Accessing the DB Console for a secure cluster now requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
-
-#### Available capacity metric in the DB Console
-
-{% include {{ page.version.version }}/misc/available-capacity-metric.md %}
-
-### Disaster recovery
-
-#### Physical cluster replication
-
-{% include {{ page.version.version }}/known-limitations/physical-cluster-replication.md %}
-- {% include {{ page.version.version }}/known-limitations/failover-stop-application.md %}
-
-#### `RESTORE` limitations
-
-- {% include {{ page.version.version }}/known-limitations/restore-udf.md %}
-- {% include {{ page.version.version }}/known-limitations/restore-tables-non-multi-reg.md %}
-- {% include {{ page.version.version }}/known-limitations/restore-multiregion-match.md %}
-
-#### Enterprise `BACKUP` does not capture database/table/column comments
-
-The [`COMMENT ON`]({% link {{ page.version.version }}/comment-on.md %}) statement associates comments to databases, tables, or columns. However, the internal table (`system.comments`) in which these comments are stored is not captured by a [`BACKUP`]({% link {{ page.version.version }}/backup.md %}) of a table or database.
-
-As a workaround, take a cluster backup instead, as the `system.comments` table is included in cluster backups. [#44396](https://github.com/cockroachdb/cockroach/issues/44396)
-
-#### `SHOW BACKUP` does not support symlinks for nodelocal
-
-{% include {{page.version.version}}/known-limitations/show-backup-symlink.md %}
-
-### High Availability
-
-#### Logical data replication (LDR)
-
-- {% include {{ page.version.version }}/known-limitations/ldr-triggers.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-udfs.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-sequences.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-indexes.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-column-families.md %}
-- {% include {{ page.version.version }}/known-limitations/ldr-composite-primary.md %}
-
-### Change data capture
-
-Change data capture (CDC) provides efficient, distributed, row-level changefeeds into Apache Kafka for downstream processing such as reporting, caching, or full-text indexing. It has the following known limitations:
-
-{% include {{ page.version.version }}/known-limitations/cdc.md %}
-{% include {{ page.version.version }}/known-limitations/cdc-queries.md %}
-- {% include {{ page.version.version }}/known-limitations/cdc-queries-column-families.md %}
-- {% include {{ page.version.version }}/known-limitations/changefeed-column-family-message.md %}
-
-#### `ALTER CHANGEFEED` limitations
-
-{% include {{ page.version.version }}/known-limitations/alter-changefeed-limitations.md %}
-- {% include {{ page.version.version }}/known-limitations/alter-changefeed-cdc-queries.md %}
-
-### Performance optimization
-
-#### Generic query plan limitations
-
-{% include {{ page.version.version }}/known-limitations/generic-query-plan-limitations.md %}
-
-#### Optimizer and locking behavior
-
-The SQL optimizer has limitations under certain isolation levels:
-
-- The new implementation of `SELECT FOR UPDATE` is not yet the default setting under `SERIALIZABLE` isolation. It can be used under `SERIALIZABLE` isolation by setting the `optimizer_use_lock_op_for_serializable` [session setting]({% link {{ page.version.version }}/session-variables.md %}) to `true`. [#114737](https://github.com/cockroachdb/cockroach/issues/114737)
-- `SELECT FOR UPDATE` does not lock completely-`NULL` column families in multi-column-family tables. [#116836](https://github.com/cockroachdb/cockroach/issues/116836)
-
-#### Statistics limitations
-
-{% include {{page.version.version}}/known-limitations/stats-refresh-upgrade.md %}
-{% include {{ page.version.version }}/known-limitations/forecasted-stats-limitations.md %}
-
-#### Incorrect query plans for partitions with `NULL` values
-
-In cases where the partition definition includes a comparison with `NULL` and a query constraint, incorrect query plans are returned. However, this case uses non-standard partitioning which defines partitions which could never hold values, so it is not likely to occur in production environments. [#82774](https://github.com/cockroachdb/cockroach/issues/82774)
-
-#### Vectorized engine limitations
-
-{% include {{ page.version.version }}/known-limitations/vectorized-engine-limitations.md %}
-
-#### `transaction_rows_read_err` and `transaction_rows_written_err` do not halt query execution
-
-The `transaction_rows_read_err` and `transaction_rows_written_err` [session settings]({% link {{ page.version.version }}/set-vars.md %}) limit the number of rows read or written by a single [transaction]({% link {{ page.version.version }}/transactions.md %}#limit-the-number-of-rows-written-or-read-in-a-transaction). These session settings will fail the transaction with an error, but not until the current query finishes executing and the results have been returned to the client. [#70473](https://github.com/cockroachdb/cockroach/issues/70473)
-
-#### `sql.guardrails.max_row_size_err` misses indexed virtual computed columns
-
-The `sql.guardrails.max_row_size_err` [cluster setting]({% link {{ page.version.version }}/cluster-settings.md %}) misses large rows caused by indexed virtual computed columns. This is because the guardrail only checks the size of primary key rows, not secondary index rows. [#69540](https://github.com/cockroachdb/cockroach/issues/69540)
-
-#### Using `LIKE...ESCAPE` in `WHERE` and `HAVING` constraints
-
-CockroachDB tries to optimize most comparisons operators in `WHERE` and `HAVING` clauses into constraints on SQL indexes by only accessing selected rows. This is done for `LIKE` clauses when a common prefix for all selected rows can be determined in the search pattern (e.g., `... LIKE 'Joe%'`). However, this optimization is not yet available if the `ESCAPE` keyword is also used. [#30192](https://github.com/cockroachdb/cockroach/issues/30192)
-
-#### Import with a high amount of disk contention
-
-{% include {{ page.version.version }}/known-limitations/import-high-disk-contention.md %}
-
-#### CockroachDB does not properly optimize some left and anti joins with GIN indexes
-
-[Left joins]({% link {{ page.version.version }}/joins.md %}#left-outer-joins) and anti joins involving [`JSONB`]({% link {{ page.version.version }}/jsonb.md %}), [`ARRAY`]({% link {{ page.version.version }}/array.md %}), or [spatial-typed]({% link {{ page.version.version }}/export-spatial-data.md %}) columns with a multi-column or [partitioned]({% link {{ page.version.version }}/alter-index.md %}#partition-by) [GIN index](inverted-indexes.html) will not take advantage of the index if the prefix columns of the index are unconstrained, or if they are constrained to multiple, constant values.
-
-To work around this limitation, make sure that the prefix columns of the index are either constrained to single constant values, or are part of an equality condition with an input column (e.g., `col1 = col2`, where `col1` is a prefix column and `col2` is an input column).
-
-For example, suppose you have the following [multi-region database]({% link {{ page.version.version }}/multiregion-overview.md %}) and tables:
-
-``` sql
-CREATE DATABASE multi_region_test_db PRIMARY REGION "europe-west1" REGIONS "us-west1", "us-east1" SURVIVE REGION FAILURE;
-USE multi_region_test_db;
-
-CREATE TABLE t1 (
- k INT PRIMARY KEY,
- geom GEOMETRY
-);
-
-CREATE TABLE t2 (
- k INT PRIMARY KEY,
- geom GEOMETRY,
- INVERTED INDEX geom_idx (geom)
-) LOCALITY REGIONAL BY ROW;
-```
-
-And you [insert]({% link {{ page.version.version }}/insert.md %}) some data into the tables:
-
-``` sql
-INSERT INTO t1 SELECT generate_series(1, 1000), 'POINT(1.0 1.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'us-east1', generate_series(1, 1000), 'POINT(1.0 1.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'us-west1', generate_series(1001, 2000), 'POINT(2.0 2.0)';
-INSERT INTO t2 (crdb_region, k, geom) SELECT 'europe-west1', generate_series(2001, 3000), 'POINT(3.0 3.0)';
-```
-
-If you attempt a left join between `t1` and `t2` on only the geometry columns, CockroachDB will not be able to plan an [inverted join]({% link {{ page.version.version }}/joins.md %}#inverted-joins):
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom);
- info
-------------------------------------
- distribution: full
- vectorized: true
-
- • cross join (right outer)
- │ pred: st_contains(geom, geom)
- │
- ├── • scan
- │ estimated row count: 3,000
- │ table: t2@primary
- │ spans: FULL SCAN
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(15 rows)
-```
-
-However, if you constrain the `crdb_region` column to a single value, CockroachDB can plan an inverted join:
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-east1';
- info
---------------------------------------------------
- distribution: full
- vectorized: true
-
- • lookup join (left outer)
- │ table: t2@primary
- │ equality: (crdb_region, k) = (crdb_region,k)
- │ equality cols are key
- │ pred: st_contains(geom, geom)
- │
- └── • inverted join (left outer)
- │ table: t2@geom_idx
- │
- └── • render
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(18 rows)
-```
-
-If you do not know which region to use, you can combine queries with [`UNION ALL`]({% link {{ page.version.version }}/selection-queries.md %}#union-combine-two-queries):
-
-```
-> EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-east1'
-UNION ALL SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'us-west1'
-UNION ALL SELECT * FROM t1 LEFT JOIN t2 ON st_contains(t1.geom, t2.geom) AND t2.crdb_region = 'europe-west1';
- info
-----------------------------------------------------------
- distribution: full
- vectorized: true
-
- • union all
- │
- ├── • union all
- │ │
- │ ├── • lookup join (left outer)
- │ │ │ table: t2@primary
- │ │ │ equality: (crdb_region, k) = (crdb_region,k)
- │ │ │ equality cols are key
- │ │ │ pred: st_contains(geom, geom)
- │ │ │
- │ │ └── • inverted join (left outer)
- │ │ │ table: t2@geom_idx
- │ │ │
- │ │ └── • render
- │ │ │
- │ │ └── • scan
- │ │ estimated row count: 1,000
- │ │ table: t1@primary
- │ │ spans: FULL SCAN
- │ │
- │ └── • lookup join (left outer)
- │ │ table: t2@primary
- │ │ equality: (crdb_region, k) = (crdb_region,k)
- │ │ equality cols are key
- │ │ pred: st_contains(geom, geom)
- │ │
- │ └── • inverted join (left outer)
- │ │ table: t2@geom_idx
- │ │
- │ └── • render
- │ │
- │ └── • scan
- │ estimated row count: 1,000
- │ table: t1@primary
- │ spans: FULL SCAN
- │
- └── • lookup join (left outer)
- │ table: t2@primary
- │ equality: (crdb_region, k) = (crdb_region,k)
- │ equality cols are key
- │ pred: st_contains(geom, geom)
- │
- └── • inverted join (left outer)
- │ table: t2@geom_idx
- │
- └── • render
- │
- └── • scan
- estimated row count: 1,000
- table: t1@primary
- spans: FULL SCAN
-(54 rows)
-```
-
-[#59649](https://github.com/cockroachdb/cockroach/issues/59649)
-
-#### Locality optimized search limitations
-
-{% include {{page.version.version}}/known-limitations/locality-optimized-search-virtual-computed-columns.md %}
-{% include {{ page.version.version }}/known-limitations/locality-optimized-search-limited-records.md %}
-
-#### Query plans for materialized views
-
-{% include {{page.version.version}}/known-limitations/materialized-views-no-stats.md %}
-
-#### 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/v26.1/migrate-from-oracle.md b/src/current/v26.1/migrate-from-oracle.md
index a62e9ae2c11..9368233f580 100644
--- a/src/current/v26.1/migrate-from-oracle.md
+++ b/src/current/v26.1/migrate-from-oracle.md
@@ -261,12 +261,12 @@ Use the table below for data type mappings:
When moving from Oracle to CockroachDB data types, consider the following:
-- [Schema changes within transactions]({% link {{ page.version.version }}/known-limitations.md %}#schema-changes-within-transactions)
+- [Schema changes within transactions]({% link {{ page.version.version }}/online-schema-changes.md %}#known-limitations)
- [Schema changes between executions of prepared statements]({% link {{ page.version.version }}/online-schema-changes.md %}#no-online-schema-changes-between-executions-of-prepared-statements)
- If [`JSON`]({% link {{ page.version.version }}/jsonb.md %}) columns are used only for payload, consider switching to [`BYTES`]({% link {{ page.version.version }}/bytes.md %}).
- Max size of a single [column family]({% link {{ page.version.version }}/column-families.md %}) (by default, the [maximum size of a range]({% link {{ page.version.version }}/configure-replication-zones.md %}#range-max-bytes)).
-For more information, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}), [Online Schema Changes]({% link {{ page.version.version }}/online-schema-changes.md %}), and [Transactions]({% link {{ page.version.version }}/transactions.md %}).
+For more information, refer to [Online Schema Changes]({% link {{ page.version.version }}/online-schema-changes.md %}) and [Transactions]({% link {{ page.version.version }}/transactions.md %}).
### NULLs
diff --git a/src/current/v26.1/node-shutdown.md b/src/current/v26.1/node-shutdown.md
index 6465879950a..f44cb6ee329 100644
--- a/src/current/v26.1/node-shutdown.md
+++ b/src/current/v26.1/node-shutdown.md
@@ -880,6 +880,10 @@ Most of the guidance in this page is most relevant to manual deployments, althou
You can adjust the [`server.shutdown.connections.timeout`](#server-shutdown-connections-timeout) setting for client applications or application servers that connect to CockroachDB {{ site.data.products.advanced }} clusters. Ensure that the connection pool maximum lifetime is shorter than that value, as per the [Cluster settings](#server-shutdown-connections-timeout) guidance.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/node-shutdown-limitations.md %}
+
## See also
- [Upgrade CockroachDB]({% link {{ page.version.version }}/upgrade-cockroach-version.md %})
diff --git a/src/current/v26.1/null-handling.md b/src/current/v26.1/null-handling.md
index 454240d5b8b..a84d2bfcd13 100644
--- a/src/current/v26.1/null-handling.md
+++ b/src/current/v26.1/null-handling.md
@@ -554,3 +554,7 @@ For example:
NULL
(1 row)
~~~
+
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/null-limitations.md %}
diff --git a/src/current/v26.1/partitioning.md b/src/current/v26.1/partitioning.md
index 6e0acd4b000..1a7392a6fb9 100644
--- a/src/current/v26.1/partitioning.md
+++ b/src/current/v26.1/partitioning.md
@@ -693,9 +693,7 @@ Other databases use partitioning for three additional use cases: secondary index
## Known limitations
-- {% include {{ page.version.version }}/known-limitations/partitioning-with-placeholders.md %}
-
-- {% include {{ page.version.version }}/known-limitations/drop-single-partition.md %}
+{% include {{ page.version.version }}/known-limitations/partition-limitations.md %}
## See also
diff --git a/src/current/v26.1/query-spatial-data.md b/src/current/v26.1/query-spatial-data.md
index 2f660ef495e..a259dd87082 100644
--- a/src/current/v26.1/query-spatial-data.md
+++ b/src/current/v26.1/query-spatial-data.md
@@ -26,7 +26,7 @@ CockroachDB does not implement the full list of PostGIS built-in functions and o
If your application needs support for functions that are not yet implemented, check the [meta-issue for built-in function support on GitHub](https://github.com/cockroachdb/cockroach/issues/49203), which describes how to find an issue for the built-in function(s) you need.
-For a list of other known limitations, see [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations).
+For a list of other known limitations, refer to [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations).
### ORM compatibility
diff --git a/src/current/v26.1/savepoint.md b/src/current/v26.1/savepoint.md
index 725b8e35388..f89df9f38dd 100644
--- a/src/current/v26.1/savepoint.md
+++ b/src/current/v26.1/savepoint.md
@@ -289,6 +289,10 @@ Use the [`SHOW SAVEPOINT STATUS`]({% link {{ page.version.version }}/show-savepo
Note that the `is_initial_savepoint` column will be true if the savepoint is the outermost savepoint in the transaction.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/savepoint-limitations.md %}
+
## See also
- [`SHOW SAVEPOINT STATUS`]({% link {{ page.version.version }}/show-savepoint-status.md %})
diff --git a/src/current/v26.1/secure-a-cluster.md b/src/current/v26.1/secure-a-cluster.md
index e2819037b89..776b69b5d8d 100644
--- a/src/current/v26.1/secure-a-cluster.md
+++ b/src/current/v26.1/secure-a-cluster.md
@@ -314,7 +314,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v26.1/set-vars.md b/src/current/v26.1/set-vars.md
index 3ea6b4bc2a2..cb68d212746 100644
--- a/src/current/v26.1/set-vars.md
+++ b/src/current/v26.1/set-vars.md
@@ -459,6 +459,7 @@ When setting a time zone, note the following:
## Known Limitations
{% include {{page.version.version}}/known-limitations/set-transaction-no-rollback.md %}
+{% include {{ page.version.version }}/known-limitations/int-limitations.md %}
## See also
diff --git a/src/current/v26.1/simulate-a-multi-region-cluster-on-localhost.md b/src/current/v26.1/simulate-a-multi-region-cluster-on-localhost.md
index 59450587dba..1fcfeaf18a5 100644
--- a/src/current/v26.1/simulate-a-multi-region-cluster-on-localhost.md
+++ b/src/current/v26.1/simulate-a-multi-region-cluster-on-localhost.md
@@ -68,7 +68,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
To verify that the 9 nodes you specified are up and running as expected, go to the [**Cluster Overview**]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}) at http://localhost:8080/#/overview/list.
{{site.data.alerts.callout_info}}
-Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
To see which nodes are located in which regions, and to see the simulated latencies between them, go to the [**Network Diagnostics**]({% link {{ page.version.version }}/ui-network-latency-page.md %}) page at http://localhost:8080/#/reports/network/region
diff --git a/src/current/v26.1/spatial-data-overview.md b/src/current/v26.1/spatial-data-overview.md
index 9ab5a460200..ec183bdaad9 100644
--- a/src/current/v26.1/spatial-data-overview.md
+++ b/src/current/v26.1/spatial-data-overview.md
@@ -27,7 +27,7 @@ See the links below for more information about how to use CockroachDB for spatia
- [Spatial indexes]({% link {{ page.version.version }}/spatial-indexes.md %})
- [Spatial and GIS Glossary of Terms]({% link {{ page.version.version }}/architecture/glossary.md %})
-- [Known Limitations]({% link {{ page.version.version }}/known-limitations.md %}#spatial-support-limitations)
+- Refer to [Known Limitations]({% link {{ page.version.version }}/spatial-data-overview.md %}#known-limitations)
- [Spatial functions]({% link {{ page.version.version }}/functions-and-operators.md %}#spatial-functions)
- [Client library compatibility]({% link {{ page.version.version }}/query-spatial-data.md %}#compatibility)
@@ -64,6 +64,10 @@ In addition to the [generated reference documentation for spatial functions]({%
- [`ST_Union`]({% link {{ page.version.version }}/st_union.md %})
- [`ST_Within`]({% link {{ page.version.version }}/st_within.md %})
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/spatial-limitations.md %}
+
## See also
- [Introducing Distributed Spatial Data in CockroachDB](https://www.cockroachlabs.com/blog/spatial-data/) (blog post)
diff --git a/src/current/v26.1/start-a-local-cluster-in-docker-windows.md b/src/current/v26.1/start-a-local-cluster-in-docker-windows.md
index 5d704a7b5d7..fd04acb4891 100644
--- a/src/current/v26.1/start-a-local-cluster-in-docker-windows.md
+++ b/src/current/v26.1/start-a-local-cluster-in-docker-windows.md
@@ -305,7 +305,7 @@ The [DB Console]({% link {{ page.version.version }}/ui-overview.md %}) gives you
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
@@ -326,7 +326,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v26.1/start-a-local-cluster.md b/src/current/v26.1/start-a-local-cluster.md
index a38f33f08a4..5a8e2f2cf07 100644
--- a/src/current/v26.1/start-a-local-cluster.md
+++ b/src/current/v26.1/start-a-local-cluster.md
@@ -259,7 +259,7 @@ The CockroachDB [DB Console]({% link {{ page.version.version }}/ui-overview.md %
This demonstrates CockroachDB's [automated replication]({% link {{ page.version.version }}/demo-replication-and-rebalancing.md %}) of data via the Raft consensus protocol.
{{site.data.alerts.callout_info}}
- Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, see this [limitation]({% link {{ page.version.version }}/known-limitations.md %}#available-capacity-metric-in-the-db-console).
+ Capacity metrics can be incorrect when running multiple nodes on a single machine. For more details, refer to [Capacity metrics]({% link {{ page.version.version }}/ui-cluster-overview-page.md %}#capacity-metrics).
{{site.data.alerts.end}}
1. Click [**Metrics**]({% link {{ page.version.version }}/ui-overview-dashboard.md %}) to access a variety of time series dashboards, including graphs of SQL queries and service latency over time:
diff --git a/src/current/v26.1/subqueries.md b/src/current/v26.1/subqueries.md
index 861623eeab8..08693c55589 100644
--- a/src/current/v26.1/subqueries.md
+++ b/src/current/v26.1/subqueries.md
@@ -123,6 +123,10 @@ In a `LATERAL` subquery join, the rows returned by the inner subquery are added
The results of scalar subqueries are loaded entirely into memory when the execution of the surrounding query starts. To prevent execution errors due to memory exhaustion, ensure that subqueries return as few results as possible.
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/subquery-mutations-limitations.md %}
+
## See also
- [Selection Queries]({% link {{ page.version.version }}/selection-queries.md %})
diff --git a/src/current/v26.1/transactions.md b/src/current/v26.1/transactions.md
index 64cb8bcae84..86a32d0353b 100644
--- a/src/current/v26.1/transactions.md
+++ b/src/current/v26.1/transactions.md
@@ -236,6 +236,10 @@ The limits are enforced after each statement of a transaction has been fully exe
Enabling `transaction_rows_read_err` disables a performance optimization for mutation statements in implicit transactions where CockroachDB can auto-commit without additional network round trips.
{{site.data.alerts.end}}
+## Known limitations
+
+{% include {{ page.version.version }}/known-limitations/transaction-row-count-limitations.md %}
+
## See also
- [`BEGIN`]({% link {{ page.version.version }}/begin-transaction.md %})
diff --git a/src/current/v26.1/triggers.md b/src/current/v26.1/triggers.md
index 396754323c3..590edad8aac 100644
--- a/src/current/v26.1/triggers.md
+++ b/src/current/v26.1/triggers.md
@@ -67,7 +67,7 @@ CREATE TRIGGER audit_address_change
~~~
{{site.data.alerts.callout_info}}
-Due to a [known limitation]({% link {{ page.version.version }}/known-limitations.md %}#limitations-for-composite-types), `OLD` and `NEW` must be wrapped in parentheses when accessing column names.
+Due to a [known limitation]({% link {{ page.version.version }}/create-type.md %}#known-limitations), `OLD` and `NEW` must be wrapped in parentheses when accessing column names.
{{site.data.alerts.end}}
Only `OLD` can be referenced in the `WHEN` clause of a `DELETE` trigger, and only `NEW` in the `WHEN` clause of an `INSERT` trigger. `OLD` or `NEW` or both can be referenced in the `WHEN` clause of an `UPDATE` trigger. For details, refer to [Trigger variables](#trigger-variables).
diff --git a/src/current/v26.1/ui-overview.md b/src/current/v26.1/ui-overview.md
index 41d3c70f5f5..8afeb20fad1 100644
--- a/src/current/v26.1/ui-overview.md
+++ b/src/current/v26.1/ui-overview.md
@@ -91,6 +91,10 @@ You can access the DB Console from every node at `http://:`, or
For guidance on accessing the DB Console in the context of cluster deployment, see [Start a Local Cluster]({% link {{ page.version.version }}/start-a-local-cluster.md %}) and [Manual Deployment]({% link {{ page.version.version }}/manual-deployment.md %}).
+{{site.data.alerts.callout_danger}}
+Accessing the DB Console for a secure cluster requires login information (i.e., username and password). This login information is stored in a system table that is replicated like other data in the cluster. If a majority of the nodes with the replicas of the system table data go down, users will be locked out of the DB Console.
+{{site.data.alerts.end}}
+
### Proxy DB Console
If your CockroachDB cluster is behind a load balancer, you may wish to proxy your DB Console connection to a different node in the cluster from the node you first connect to. This is useful in deployments where a third-party load balancer otherwise determines which CockroachDB node you connect to in DB Console, or where web management access is limited to a subset of CockroachDB instances in a cluster.