在 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
);
現在我想更新表格,使“名稱”列更大:
ALTER TABLE items
ALTER COLUMN name TYPE varchar(50);
但我得到一個錯誤
SQL 錯誤 [42601]:錯誤:無法更改生成的列使用的列的型別
詳細資訊:列“name”由生成的列“name_search”使用。
我在 Internet 上找不到任何解決方法或解決此問題的方法。如何解決?是否可以在不洗掉舊列型別和創建臨時表的情況下更新列型別?
我的想法是 - 新舊列值型別應該兼容。我正在使該欄位更大,以便它可以存盤更多資料,因此應該可以擴展現有列。或不?
uj5u.com熱心網友回復:
您必須洗掉生成的列,更改表并讀取生成的列:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464764.html
標籤:sql PostgreSQL sql更新 postgresql-14
上一篇:如何計算特定值之后的列中的值
