清除postgres删除列的知识

Eri*_*rik 5 postgresql

我在postgres数据库中有一个表,它在一个测试环境中使用,我们需要一次添加和删除几列.问题是postgres最多有1600列,这个计数包括删除的列.我的桌子上永远不会有1600个"未掉落"的列,但随着时间的推移,它会累积到1600以上.

我已经尝试使用VACUUMVACUUM FULL,我尝试了重铸现有列作为自己的类型(ALTER TABLE table ALTER COLUMN anycol TYPE anytype)引起的Postgres扫描所有的列和清理离队列存储,但这些复位Postgres的'列数的".

我知道这可以通过复制整个表来解决,但这有其自身的问题,并且是一个单独的问题.

你知道一种方法让postgres忘记它已经删除了列吗?

我知道postgres不是为这样的应用程序设计的,但我不打算理解为什么我们选择以这种方式实现它.如果你有一个替代工具可以使用,我有兴趣听听它,但我仍然想找到解决方案.

Pet*_*aut 5

除了通过重新创建表格之外,这是不可能的,正如您已经发现的那样.

否则,数据库系统必须以某种方式跟踪被删除列使用的存储何时被清除,然后重新编号属性.那将是非常昂贵和复杂的.

  • 对我来说,这看起来像是VACUUM FULL(包括ANALYZE?)的工作,无论如何它都会重写表并且还需要一个表锁.与其必须完成的所有其他工作相比,pg_class的更新不会太昂贵. (3认同)