SQL 更新生成列使用的列
SQL update column used by generated column
在 Postgresql 14 中,我有:
CREATE TABLE items
(
id bigint NOT NULL PRIMARY KEY,
name varchar(40) not null,
name_search tsvector GENERATED ALWAYS AS (to_tsvector('simple', name)) STORED
);
现在我想更新 table,使“名称”列更大:
ALTER TABLE items
ALTER COLUMN name TYPE varchar(50);
但是我得到一个错误
SQL Error [42601]: ERROR: cannot alter type of a column used by a generated column
Detail: Column "name" is used by generated column "name_search".
我无法在 Internet 上找到此问题的任何解决方法或修复方法。如何解决?是否可以在不删除旧列类型和创建临时文件的情况下更新列类型 table?
我的想法是 - 新旧列值类型应该兼容。我正在扩大该字段,以便它可以存储更多数据,因此应该可以扩展现有列。还是不行?
您必须删除生成的列,更改 table 并重新添加生成的列:
set lock_timeout = '1s';
begin
alter table items drop column name_search ;
ALTER TABLE items ALTER COLUMN name TYPE varchar(50);
alter table items add column name_search tsvector GENERATED ALWAYS AS (to_tsvector('simple', name)) STORED ;
commit
在 Postgresql 14 中,我有:
CREATE TABLE items
(
id bigint NOT NULL PRIMARY KEY,
name varchar(40) not null,
name_search tsvector GENERATED ALWAYS AS (to_tsvector('simple', name)) STORED
);
现在我想更新 table,使“名称”列更大:
ALTER TABLE items
ALTER COLUMN name TYPE varchar(50);
但是我得到一个错误
SQL Error [42601]: ERROR: cannot alter type of a column used by a generated column
Detail: Column "name" is used by generated column "name_search".
我无法在 Internet 上找到此问题的任何解决方法或修复方法。如何解决?是否可以在不删除旧列类型和创建临时文件的情况下更新列类型 table?
我的想法是 - 新旧列值类型应该兼容。我正在扩大该字段,以便它可以存储更多数据,因此应该可以扩展现有列。还是不行?
您必须删除生成的列,更改 table 并重新添加生成的列:
set lock_timeout = '1s';
begin
alter table items drop column name_search ;
ALTER TABLE items ALTER COLUMN name TYPE varchar(50);
alter table items add column name_search tsvector GENERATED ALWAYS AS (to_tsvector('simple', name)) STORED ;
commit