Postgresql 9.1 更改表以更改索引的大小

Postgresql 9.1 更改表以更改索引的大小,postgresql-9.1,Postgresql 9.1,我需要将一列的varchar从64扩大到80。这张桌子相当大(9米排)。使alter不确定的一点是列也被索引 所以,如果我更改列,因为列是索引之一,那么行或表是否会发生锁定 谢谢。不确定锁定部件。但标准的建议是先删除索引,然后修改表,再创建索引 drop index [[index name]] go alter table t1 [[alter column]] go create index [[index name]] go 是的,没错。但我有很多使用该索引的并发查询。如果删除索引

我需要将一列的varchar从64扩大到80。这张桌子相当大(9米排)。使alter不确定的一点是列也被索引

所以,如果我更改列,因为列是索引之一,那么行或表是否会发生锁定


谢谢。

不确定锁定部件。但标准的建议是先删除索引,然后修改表,再创建索引

drop index [[index name]]
go

alter table t1 [[alter column]]
go

create index [[index name]] 
go

是的,没错。但我有很多使用该索引的并发查询。如果删除索引,我想它会在修改完成之前很快把数据库吹走。我仍然认为唯一的方法是先删除索引。您是否有可以先尝试此操作的db实例?我确实尝试过删除、更改,然后再次创建,但没有太多流量,因此仍然无法确定方法。相关:。我的建议是在有机会的时候,去掉
VARCHAR
类型中的长度。如有必要,将其替换为链接答案/文章中讨论的约束。听起来varchar从一开始就不是一个好选项。看起来我应该首先将列更改为文本,然后在外部添加一些约束。但是在我的第一感觉中,“text”看起来不适合作为索引,对吗?
text
varchar
在没有长度的情况下是完全相同的
varchar
。即使有一定的长度,它们在引擎盖下的实现仍然是一样的。考虑到所有基本文本类型都共享相同的底层实现,如果索引对其中任何一种都有不同的表现,我会非常惊讶。那篇文章中讨论的缺点都与长度限制有关(除了
char
,由于传统的标准,它有奇怪的行为)alter'锁定整个表,无论您要更改的列是否已索引。如果一开始就使用varchar,那么它看起来注定要失败。这很烦人。我通常认为,当你执行此操作时,网站只需关闭几分钟。出于某种原因,安排一些停机时间不是一种选择吗?你的网站实际获得了多少流量?可能存在一个窗口,在该窗口中不会有太多用户受到影响。