在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
);
现在我想更新表,使"name"较大尺寸的列:
ALTER TABLE items
ALTER COLUMN name TYPE varchar(50);
但是我得到一个错误
SQL Error [42601]: Error: cannot alter type of a column by a generated column
详细信息:列名"生成的列"name_search"使用。
我无法在互联网上找到任何解决方法或修复这个问题。如何解决?是否有可能在不删除旧列类型和创建临时表的情况下更新列类型?
我的想法是-新旧列值类型应该兼容。我使字段更大,所以它可以存储更多的数据,因此它应该可以扩展现有的列。或不呢?
必须删除生成的列,修改表并读取生成的列:
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