【问题标题】:Changing fillfactor of existing table更改现有表的填充因子
【发布时间】:2010-11-12 00:22:35
【问题描述】:

是否可以在 PostgreSQL 8.4 中更改现有表的填充因子?

或者我是否必须使用新的填充因子创建表的副本 - 由于外键问题,这不是最好的方法?

【问题讨论】:

    标签: postgresql fillfactor


    【解决方案1】:

    是的,这是可能的。但是你必须在之后对该表进行 VACUUM FULL 或 CLUSTER 以重写该表。

    ALTER TABLE foo SET ( fillfactor = 50);
    VACUUM FULL foo;
    

    【讨论】:

    • 请注意,您可能想要执行 CLUSTER 而不是 VACUUM FULL。见wiki.postgresql.org/wiki/VACUUM_FULL
    • @JoeVanDyk:请注意,由于 pg 9.0 VACUUM FULL 很好 - 正如 Postgres Wiki 中所记录的那样。
    • 新的填充因子是否适用于带有 VACUUM'ing 的新元组/记录? (我可以忍受旧记录不受影响)
    • @ChristianP.:只有在块中有足够的可用空间时,数据库才能使用 HOT 更新。使用 VACUUM FULL 或 CLUSTER 重写块时可以创建额外的空间。
    • 请不要VACUUM FULL。 pg_repack 在没有排他锁的情况下做同样的工作。又名在线真空满github.com/reorg/pg_repack
    【解决方案2】:
    ALTER TABLE foo SET ( fillfactor = 20);
    VACUUM FULL foo;
    

    查看表格选项,包括。填充因子

    select t.relname as table_name, 
           t.reloptions
    from pg_class t
      join pg_namespace n on n.oid = t.relnamespace
    where n.nspname = 'jxy'
      and t.relname in ('xx', '')
    ;
    

    然后

    run pg_repack
    

    【讨论】:

    • pg_repack 是一个很棒的工具。它仅在安装了“contrib”模块时可用。如果不是,则需要 VACUUM FULL 或 CLUSTER,如另一个答案中所述。
    猜你喜欢
    • 2013-05-08
    • 2012-09-30
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多