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