我遇到一个问题,我在数据库中有一列可能是10到10,000字节的大小。你知道PostgreSQL是否支持稀疏数据(即它是否总是在列中的每个条目之前留出10,000个字节......或者只留下每个条目所需的空间)?
答案 0 :(得分:2)
Postgres会将长varlena类型存储在名为TOAST的扩展存储中。
对于字符串,它保持内联up to 126 bytes(可能意味着多字节内容少于126个字符),然后将其发送到外部存储。
您可以使用psql查看数据的存储位置:
\dt+ yourtable
顺便说一下,请注意,从Postgres的角度来看,将列的类型声明为varchar
或varchar(large_number)
之间绝对没有区别(关于存储) - 它将存储在完全相同的方式。但是,由于字符串长度检查,使用varchar(large_number)
时会有轻微的性能损失。
答案 1 :(得分:0)
使用varchar
或text
类型 - 这些只使用实际存储数据所需的空间(加上每个值的2个字节的小开销来存储长度)