相关疑难解决方法(0)

更改 varchar() 的长度限制(类型修饰符)是否会导致表或索引重写?

此问题之后,是否更改varchar()表重写或锁定比更改CHECK约束花费更多时间的结果的长度限制(类型修饰符)?从那个问题你可以看到Brandur 的说法

如果您想更改长度,则ALTER TABLE需要排他锁(请参阅https://www.postgresql.org/docs/current/static/sql-altertable.html ...)。改变CHECK是即时的。在回答一个问题,质疑文CHECK (char_length(email) <= 255)VSvarchar(255)

似乎这可能起源于 Depesz 在 2010 年发表的帖子“CHAR(X) VS. VARCHAR(X) VS. VARCHAR VS. TEXT – 2010-03-03 更新”

那么,当你[使用 varchar] 使限制更大时会发生什么?

PostgreSQL 必须重写该表。这有两个非常重要的缺点: 1. 操作时需要对表进行排他锁 2. 在非平凡表的情况下,将花费相当多的时间

您可以在此处 (2017)的评论中再次看到这一点,

尽管如此,当我想将我VARCHAR(50)VARCHAR(250).

再次在这里(2012)

顺便说一句:如果可以避免的话,我从不使用 varchar - 特别是不使用长度修饰符。它几乎提供了类型文本无法提供的任何内容。如果我需要长度限制,我会使用一个列约束,它可以在不重写整个表的情况下进行更改。

显然还有其他人怀疑这一说法。

仅仅解决这个单一的要求可能是值得的。

postgresql index locking

4
推荐指数
1
解决办法
3464
查看次数

标签 统计

index ×1

locking ×1

postgresql ×1