我有一个表,目前有不到 20 亿条记录,它的主键设置为“串行”数据类型,最多可以处理 20 亿条记录。但是,我预计很快就会达到限制。
由于我在查询中的任何地方都没有使用主键,而且它与任何其他表都没有任何关系,所以我正在考虑删除主键列本身。
我关心的是从表中删除该列需要多长时间,以及它是否会导致访问该表的其他查询出现任何锁定或停机问题。
您能否解释一下在 PostgreSQL 中删除列的过程?
我有一个表,目前有不到 20 亿条记录,它的主键设置为“串行”数据类型,最多可以处理 20 亿条记录。但是,我预计很快就会达到限制。
由于我在查询中的任何地方都没有使用主键,而且它与任何其他表都没有任何关系,所以我正在考虑删除主键列本身。
我关心的是从表中删除该列需要多长时间,以及它是否会导致访问该表的其他查询出现任何锁定或停机问题。
您能否解释一下在 PostgreSQL 中删除列的过程?
将在几毫秒内删除该列,除非您有访问该表的长时间运行的事务。如果在其他任何地方引用主键,该语句将失败。
发生的只是一个简单的元数据操作,将列标记为“已删除”。表本身没有被触及,列值仍然存在。如果您更新一行,这些“死”数据将被删除。
你不应该有没有主键的表。首先,它会阻止您使用外键,然后您可能会得到重复的行。看看这样的答案和这个替代方案。