我采用了一个Rails应用程序(Rails 3.2和Postgres 9.4),它有一些Rails字符串,我们已超过255限制。这个应用程序以前使用MySQL而不是Postgres作为后备存储。我的理解是postgres处理字符串和文本相同。它是否正确?在将所有Rails字符串迁移到文本之前,我们应该注意哪些限制?
性能问题是一个值得关注的问题,但不是主要问题。
答案 0 :(得分:8)
来自fine manual:
提示:这三种类型之间没有任何性能差异,除了使用空白填充类型时存储空间增加,还有一些额外的CPU周期来检查存储长度时的长度 - 受限制的列。虽然
character(n)
在其他一些数据库系统中具有性能优势,但PostgreSQL中没有这样的优势;实际上character(n)
通常是三者中最慢的,因为它增加了存储成本。在大多数情况下,应该使用text
或character varying
。
他们所谈论的三种类型是char(n)
,varchar(n)
和text
。提示基本上是这样说的:
char(n)
是最慢的。varchar(n)
通常位于中间,因为需要检查长度约束。text
(AKA varchar
没有n
)通常是最快的,因为没有额外的开销。除了char(n)
的空白填充以及char(n)
和varchar(n)
的长度检查外,他们在幕后都处理相同的内容。
使用ActiveRecord,t.string
为varchar
,t.text
为text
。如果您对字符串没有任何硬性限制,那么只需将t.text
与PostgreSQL一起使用即可。