[ https://issues.apache.org/jira/browse/IGNITE-21384 ]
Maksim Myskov deleted comment on IGNITE-21384:
----------------------------------------
was (Author: myskov):
After a discussion with the team, I'm closing this as non-relevant. There are
ways to achieve this behavior with much less performance penalty.
> Initialize all rows with new column's default value
> ---------------------------------------------------
>
> Key: IGNITE-21384
> URL: https://issues.apache.org/jira/browse/IGNITE-21384
> Project: Ignite
> Issue Type: New Feature
> Reporter: Maksim Myskov
> Priority: Major
> Labels: ignite-3
>
> In case of adding a new column with a default value specified (for example:
> ALTER TABLE ADD COLUMN col INT DEFAULT 10), all existing rows (that were
> added before "alter table") must be initialized with a new value.
> h3. Current behaviour
> The default value of a column is evaluated on read.
> h3. Motivation
> This is a pre-requisite for adding arbitrary expressions as default values.
> Let's imagine a simple case:
> {code:sql}
> ALTER TABLE ADD COLUMN modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP
> {code}
> With the current behavior for all existing rows the value of "modified"
> column will be evaluated on every read.
> Many DBs use the proposed behavior:
> * PostgreSQL
> * CockroachDB
> * Yugabyte
> For example, from PostgreSQL
> [docs|https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-NOTES]:
> {noformat}
> Adding a column with a volatile DEFAULT or changing the type of an existing
> column will require the entire table and its indexes to be rewritten.
> {noformat}
> h3. Downsides
> Adding a new column with a default value will be a much more expensive
> operation and can take a significant time on large tables
--
This message was sent by Atlassian Jira
(v8.20.10#820010)