postgreSQL所生成的列使用的更新列



在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

相关内容

  • 没有找到相关文章

最新更新