Database 更改postgresql中的列大小

Database 更改postgresql中的列大小,database,postgresql,postgresql-9.1,Database,Postgresql,Postgresql 9.1,我目前在postgresql中有一个名为companys的表 公司有一列名称,其长度为30,但现在我想将该列的长度减少到20个字符,但不幸的是,我在该列中有一些条目的长度不超过25-30个。有谁能建议我如何在不丢失任何数据输入的情况下减小列的大小 这就是我迄今为止所尝试的: alter table companies alter COLUMN name type varchar(20); 但我明白了: 错误:值太长,无法更改类型字符(20) 如果不缩短现有记录,则无法减小列的大小 如果您只想防

我目前在postgresql中有一个名为
companys
的表
公司
有一列
名称
,其长度为
30
,但现在我想将该列的长度减少到
20
个字符,但不幸的是,我在该列中有一些条目的长度不超过25-30个。有谁能建议我如何在不丢失任何数据输入的情况下减小列的大小

这就是我迄今为止所尝试的:

alter table companies alter COLUMN name type varchar(20);
但我明白了:

错误:值太长,无法更改类型字符(20)


如果不缩短现有记录,则无法减小列的大小

如果您只想防止在长度超过20的情况下创建新记录,那么可以通过一个触发器来实现这一点,该触发器验证长度,如果记录太长,则拒绝该记录


如果不缩短现有记录,就无法减小列的大小

如果您只想防止在长度超过20的情况下创建新记录,那么可以通过一个触发器来实现这一点,该触发器验证长度,如果记录太长,则拒绝该记录


您可以剪切长度超过20个字符的名称:

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

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

您可以剪切长度超过20个字符的名称:

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

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