Bug #88623 | Modifying virtually generated column is not online | ||
---|---|---|---|
Submitted: | 23 Nov 2017 12:03 | Modified: | 24 Nov 2017 11:13 |
Reporter: | Karthik Appigatla (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: DDL | Severity: | S3 (Non-critical) |
Version: | 8, 5.7.20 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[23 Nov 2017 12:03]
Karthik Appigatla
[23 Nov 2017 14:50]
Peter Laursen
MariaDB does not rebuild table with last statement 1 queries executed, 1 success, 0 errors, 0 warnings Query: ALTER TABLE employees MODIFY COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, '-', last_name)) VIRTUAL 0 row(s) affected Execution Time : 0.013 sec Transfer Time : 1.142 sec Total Time : 1.155 sec -- Peter -- not a MySQL/Oracle (nor MariaDB) person
[24 Nov 2017 11:13]
MySQL Verification Team
Hello Karthik, Thank you for the report. Per documentation "For non-partitioned tables, ADD COLUMN and DROP COLUMN are in-place operations for virtual columns. However, adding or dropping a virtual column cannot be performed in place in combination with other ALTER TABLE operations" - https://dev.mysql.com/doc/refman/5.7/en/alter-table-generated-columns.html I'm not able to locate the reason for the restrictions on this, if this is an expected then it might end up as doc request. ## 5.7.20 (For employee schema - https://dev.mysql.com/doc/employee/en/employees-installation.html) mysql> ALTER TABLE employees ADD COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE employees MODIFY COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, '-', last_name)) VIRTUAL; Query OK, 300024 rows affected (2.82 sec) Records: 300024 Duplicates: 0 Warnings: 0 -- Attempted with ALGORITHM= <> mysql> ALTER TABLE employees MODIFY COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL, ALGORITHM= INPLACE; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE employees MODIFY COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, '-', last_name)) VIRTUAL, ALGORITHM= INPLACE; ERROR 1845 (0A000): ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. mysql> mysql> ALTER TABLE employees MODIFY COLUMN full_name VARCHAR(40) AS (CONCAT(first_name, '-', last_name)) VIRTUAL, ALGORITHM= COPY; Query OK, 300024 rows affected (2.73 sec) Records: 300024 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE employees DROP COLUMN full_name, ALGORITHM= INPLACE; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 Thanks, Umesh