更改 postgresql 中的列大小

问题描述 投票:0回答:2

我目前在 postgresql 中有一个名为

companies
的表。
companies
有一列
name
,其长度为
30
,但现在我想将列的长度减少到
20
个字符,但不幸的是,我在该列中有一些条目的长度最多为25-30。谁能建议我如何在不丢失任何数据输入的情况下减小列的大小?

这是我迄今为止尝试过的:

alter table companies alter COLUMN name type varchar(20);

但我明白了:

错误:对于类型字符变化的值太长(20)

database postgresql postgresql-9.1
2个回答
3
投票

自然的方法是截断长度超过 20 个字符的名称:

update companies
set name = substr(name, 1, 20)
where length(name) > 20;

alter table companies 
    alter column name type varchar(20);

但是,您可以使用单个命令执行相同的操作,这应该要快得多:

alter table companies 
    alter column name type varchar(20) 
    using name::varchar(20);

2
投票

您无法在不缩短现有记录的情况下减小列的大小。

如果您想要的只是防止创建长度超过 20 的新记录,则可以通过验证长度并在记录太长时拒绝记录的触发器来实现。

创建触发器

© www.soinside.com 2019 - 2024. All rights reserved.