我采用了一个 Rails 应用程序(Rails 3.2 和 Postgres 9.4),它有一些 Rails 字符串,并且我们已经超过了 255 个限制。该应用程序之前使用 MySQL 而不是 Postgres 作为后备存储。我的理解是 postgres 以相同的方式处理字符串和文本。它是否正确?在将所有 Rails 字符串迁移到文本之前,我们应该注意哪些限制?
性能问题是一个有点令人担忧的问题,但不是主要问题。
来自精美手册 http://www.postgresql.org/docs/current/interactive/datatype-character.html:
Tip:这三种类型之间没有性能差异,除了使用空白填充类型时会增加存储空间,以及在存储到长度受限列时需要一些额外的 CPU 周期来检查长度之外。尽管character(n)
在其他一些数据库系统中具有性能优势,在PostgreSQL中没有这样的优势;实际上character(n)
由于额外的存储成本,通常是三者中最慢的。大多数情况下text
or character varying
应该使用。
他们谈论的三种类型是char(n)
, varchar(n)
, and text
。该提示的实质内容是:
-
char(n)
由于空白填充并且必须检查长度约束,是最慢的。
-
varchar(n)
通常在中间,因为需要检查长度约束。
-
text
(AKA varchar
没有n
)通常是最快的,因为没有额外的开销。
除了空白填充之外char(n)
和长度检查char(n)
and varchar(n)
,它们在幕后的处理方式都是相同的。
使用 ActiveRecord,t.string
is a varchar
and t.text
is text
。如果您的字符串没有任何硬性长度限制,那么只需使用t.text
与 PostgreSQL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)