在postgresql中更改列大小

时间:2015-07-22 10:31:22

标签: database postgresql postgresql-9.1

我目前在postgresql中有一个名为companies的表 companies有一个name列,其长度为30,但现在我想将列的长度减少到20个字符,但不幸的是我在该列中有一些条目最长25-30。任何人都可以建议我如何减少列的大小而不丢失任何数据输入?

这是我到目前为止所尝试的:

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

但我明白了:

  

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

2 个答案:

答案 0 :(得分:2)

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

如果你想要的是阻止在长度超过20的情况下创建新记录,可以通过验证长度的触发器来实现,如果记录太长则拒绝记录。

Create Trigger

答案 1 :(得分:2)

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

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

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