PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αž₯αž‘αŸ’αž’αž·αž–αž›αž“αŸƒαž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž“αŸ…αž›αžΎαžαž» αž“αž·αž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™ αž αžΎαž™αž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ Postgres αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸαŸ” αž˜αžΆαž“αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ αžŠαžΌαž…αž‡αžΆ VACUUM FULL ឬ CLUSTER αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αžœαžΆαž…αžΆαž€αŸ‹αžŸαŸ„αžαž»αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž‡αžΆαž“αž·αž…αŸ’αž…αž‘αŸαŸ”

αž’αžαŸ’αžαž”αž‘αž“αžΉαž„αž˜αžΆαž“αž‘αŸ’αžšαžΉαžŸαŸ’αžŠαžΈαžαžΌαž…αž˜αž½αž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž αžΎαž˜αž–αŸ„αŸ‡αž€αžΎαžαž‘αžΎαž„ αžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž”αŸ‹αž‘αž›αŸ‹αž“αžΉαž„αžœαžΆ αž’αŸ†αž–αžΈαž§αž”αžŸαž‚αŸ’αž‚αžŠαŸ‚αž›αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž› αž“αž·αž„αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ pg_repack αŸ”

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž“αŸ… PgConf.Russia 2020αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž αžΎαž˜αž–αŸ„αŸ‡αž€αžΎαžαž‘αžΎαž„?

Postgres αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αžšαžΌαž–αž αž»αž€αŸ†αžŽαŸ‚ (MVCC) αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαžαžΆαž‡αž½αžšαž“αžΈαž˜αž½αž™αŸ—αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž’αžΆαž…αž˜αžΆαž“αž€αŸ†αžŽαŸ‚αž‡αžΆαž…αŸ’αžšαžΎαž“ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αžΎαž›αž˜αž·αž“αžƒαžΎαž‰αž›αžΎαžŸαž–αžΈαž€αŸ†αžŽαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž€αŸ†αžŽαŸ‚αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆ αž αžΎαž™αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ”

αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž€αŸ†αžŽαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” Postgres αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αŸ†αž–αŸαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ„αž™αž‘αŸ†αž–αŸαžšαž˜αž½αž™ αž αžΎαž™αž‘αŸ†αž–αŸαžšαž˜αž½αž™αž‚αžΊαž‡αžΆαž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αž”αŸ’αž”αž”αžšαž˜αžΆαžŠαŸ‚αž›αž’αžΆαž…αž’αžΆαž“αž”αžΆαž“αž–αžΈαžαžΆαžŸ αž¬αžŸαžšαžŸαŸαžšαŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΌαž…αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž€αžΎαžαž‘αžΎαž„αŸ”

αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž™αžΎαž„αž˜αžΆαž“αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžšαžŠαŸ†αž”αžΌαž„αž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαžΆαžšαžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αžŽαŸ‚αž”αž“αŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸƒαž‡αž½αžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž˜αž½αž™ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰ αž™αžΎαž„αž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž€αž˜αŸ’αžšαž·αžαž―αž€αŸ„αž‚αžΊ Read Committed)αŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€ αž™αžΎαž„β€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–β€‹αž’αžΆαžαž»β€‹αž˜αž½αž™β€‹αžŠαŸ„αž™β€‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹β€‹αž€αŸ†αžŽαŸ‚β€‹αž…αžΆαžŸαŸ‹β€‹αžαžΆβ€‹αž˜αž·αž“β€‹αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’β€‹αž‘αŸ€αžβ€‹αž‘αŸαŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αž˜αž½αž™αž‡αŸ†αž αžΆαž“αž˜αŸ’αžαž„αŸ— αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαž›αž»αž”αž€αŸ†αžŽαŸ‚αž‡αž½αžš αž™αžΎαž„αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž”αŸ’αžšαž αŸ‚αž›αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊ "αžŸαŸ†αžšαžΆαž˜" αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž…αŸ†αž–αŸ„αŸ‡αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

Postgres αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαž˜αž½αž™αŸ” αžœαŸ‰αžΆαž€αž™αžΌαž˜αžŠαŸ‚αž›αžŸαž˜αŸ’αž’αžΆαžαž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž›αŸ‚αž„αž”αŸ’αžšαžΎ αž αžΎαž™αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αž€αž“αŸ’αž›αŸ‚αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž›αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹ αž¬αžšαžœαž›αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ„αŸ‡ "αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžšαžΆαž˜" αž“αŸ…αžαŸ‚αž˜αžΆαž“ αž αžΎαž™αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž‘αŸ†αž–αŸαžšαž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αž€αŸ’αž“αž»αž„αž–αŸαž›αžŽαžΆαž˜αž½αž™ αžαžΆαžšαžΆαž„αž“αžΉαž„αž˜αžΆαž“αž”αž½αž“αž‘αŸ†αž–αŸαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαŸ‚αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž“αžΉαž„αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αž‘αžΆαž›αŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸ…αž–αŸαž›αž…αžΌαž›αž”αŸ’αžšαžΎαžαžΆαžšαžΆαž„αž™αžΎαž„αž“αžΉαž„αž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡ VACUUM αž›αž»αž”αž€αŸ†αžŽαŸ‚αž‡αž½αžšαžŠαŸαž€αžŠαŸ‚αž›αž˜αž·αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸαžŠαŸ„αž™ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αžΉαž„αž˜αž·αž“αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžαŸ’αž›αžΆαŸ†αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž™αžΎαž„αž“αžΉαž„αž˜αžΆαž“αž‘αŸ†αž αŸ†αž‘αŸ†αž“αŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžš αž¬αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž‘αŸ†αž–αŸαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αž½αžšαžαŸ’αž˜αžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž“αŸ…αžαŸ‚αž’αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”
αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αŸ†αž–αŸαžšαž‘αž‘αŸαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ (αž‘αŸ†αž–αŸαžšαž‘αžΈαž–αžΈαžšαž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„) αž‚αžΊαž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž―αž€αžŸαžΆαžšαž“αŸ„αŸ‡ VACUUM αž“αžΉαž„αž’αžΆαž…αž€αžΆαžαŸ‹αžœαžΆαž”αžΆαž“αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž₯αž‘αžΌαžœβ€‹αž“αžΆαž„β€‹αž“αŸ…β€‹αž€αžŽαŸ’αžαžΆαž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž’αŸ’αžœαžΈβ€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΆαž„β€‹αž”αžΆαž“β€‹αž‘αžΎαž™αŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αŸ†αž“αž½αž“αž“αŸƒαž‘αŸ†αž–αŸαžšαž‘αž‘αŸ αž¬αžœαž·αžŸαžΆαž›αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž’αŸ† αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž αžΎαž˜αž–αŸ„αŸ‡ αžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž„αž›αžΎαž‚αžΊαž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž“αŸƒαž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜ αžœαžΆαž€αžΎαžαž‘αžΎαž„αžαžΆαž˜αžšαž”αŸ€αž”αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

αžαžΎαžαŸ’αž‰αž»αŸ†αž αžΎαž˜αž–αŸ„αŸ‡αž‘αŸ?

αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαžΆαžαžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž αžΎαž˜αž–αŸ„αŸ‡αžŠαŸ‚αžšαž¬αž‘αŸαŸ” αž‚αŸ†αž“αž·αžαž‘αžΈαž˜αž½αž™αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαžŸαŸ’αžαž·αžαž· Postgres αžαžΆαž„αž€αŸ’αž“αž»αž„αžŠαŸ‚αž›αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αž’αŸ†αž–αžΈαž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€ "αž”αž“αŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹" αž‡αžΆαžŠαžΎαž˜αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžšαž€αžƒαžΎαž‰αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αž“αŸ…αž›αžΎαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ” αž™αžΎαž„αž”αžΆαž“αž™αž€αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αžŸαŸ’αž‚αŸ’αžšαžΈαž” αž–αžΈ PostgreSQL Experts αžŠαŸ‚αž›αž’αžΆαž…αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžαžΆαžšαžΆαž„αž αžΎαž˜αž–αŸ„αŸ‡ αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ toast αž“αž·αž„ bloat btree αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊ 10-20% αŸ”

αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž”αŸ’αžšαžΎαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ pgstattupleαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž˜αžΎαž›αžαžΆαž„αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžš αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αžΆαŸ†αž„αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαž“αŸ‹αžŸαŸ’αž˜αžΆαž“ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΈαž–αžΈαžšαž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŸαŸ’αž€αŸαž“αžαžΆαžšαžΆαž„αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”

αž™αžΎαž„αž–αž·αž…αžΆαžšαžŽαžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αŸ„αž„αžαžΌαž…αž˜αž½αž™αžšαž αžΌαžαžŠαž›αŸ‹ 20% αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αŸ” αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆ analogue αž“αŸƒ fillfactor αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ តុ ΠΈ αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ. αž“αŸ… 50% αž“αž·αž„αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡ αž”αž‰αŸ’αž αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž™αž»αž‘αŸ’αž’αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡

Postgres αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αžŸαžΆαž€αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡αž‘αŸαŸ”

αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ AUTOVACUUM αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž αžΎαž˜αž–αŸ„αŸ‡. αž¬αž…αŸ’αž”αžΆαžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαžœαžΆαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ” αž“αŸαŸ‡αž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαžŠαŸ†αž”αžΌαž“αŸ’αž˜αžΆαž“ "αž”αŸ’αžšαž’αžΆαž“αž€αŸ’αžšαž»αž˜" αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αž αžœαžΆαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž˜αžΆαž“αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž‘αŸ€αž„αž‘αžΆαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž¬αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž‘αž˜αŸ’αžšαž„αŸ‹αž•αŸ’αž‘αž»αž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž αžΎαž™αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž“αžΉαž„αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž–αžΈαžαžΆαžšαžΆαž„αž˜αž½αž™αž‘αŸ…αžαžΆαžšαžΆαž„αž˜αž½αž™αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž”αž“αŸ’αžαž‘αŸ…αž˜αž»αžαž”αž“αŸ’αžαž·αž… αž αžΎαž™αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœ AUTOVACUUM αž‘αŸ…αž“αžΉαž„αž‘αž˜αŸ’αžšαž„αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸƒαžαžΆαžšαžΆαž„αž“αžΈαž˜αž½αž™αŸ—αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž“αŸαŸ‡αž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎαž“αŸ„αŸ‡αž‘αŸαŸ”

αž αŸαžαž»αž•αž›αž‘αžΌαž‘αŸ…αž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž› AUTOVACUUM αž˜αž·αž“αž’αžΆαž…αžšαž€αŸ’αžŸαžΆαžαžΆαžšαžΆαž„αž”αžΆαž“αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸαž™αžΌαžšαžŠαŸ‚αž›αžšαžΆαžšαžΆαŸ†αž„αžœαžΆαž–αžΈαž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αž’αž“αž»αžŸαžΆαžŸαž“αŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž€αŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž•αž„αžŠαŸ‚αžš - αž€αž˜αŸ’αž…αžΆαžαŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš "αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹" αž“αž·αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αŸαž›αžœαŸαž›αžΆαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαž€αž˜αŸ’αž˜αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž“αŸ…αž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊαž‡αžΆαž€αžΌαž“αž€αžΆαžαŸ‹αž“αŸƒ OLAP αž“αž·αž„ OLTP αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž“αž·αž„αžŸαŸ†αžŽαž½αžšαžαŸ’αž›αžΈαŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆ αž€αŸαžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž™αŸˆαž–αŸαž›αžœαŸ‚αž„ - αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž€αžŸαžΆαž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαŸ” αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ‚αž”αž“αŸαŸ‡αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž‚αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαžšαžΈαž€αžšαžΆαž›αžŠαžΆαž›αž”αž“αŸ’αž‘αž»αž€αž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž–αž½αž€αžœαžΆαž“αžΈαž˜αž½αž™αŸ—αŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž‘αŸ€αž - αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αŸαžŠαŸ„αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž”αž“αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹ αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚ AUTOVACUUM αžŠαŸ‚αž›αžˆαŸ’αž›αžΆαž“αž–αžΆαž“αž”αŸ†αž•αž»αžαž€αŸαž˜αž·αž“αž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αžΆαž“αžŠαŸ‚αžš αž αžΎαž™αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“ (αž”αž‰αŸ’αžˆαžšαž¬αž•αŸ’αžŠαŸαž€) αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ AUTOVACUUM αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž“αŸ…αžαŸ‚αž”αž“αŸ’αžαž€αžΎαž“αž‘αžΎαž„αŸ”

αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžš Vacuum αž–αŸαž‰ αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžΆαžšαžΆαž„ αž“αž·αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž αžΎαž™αž‘αž»αž€αžαŸ‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡ αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆ αžŸαŸ„αž•αŸ’αžαžΆαž…αŸ‹αž˜αž»αžαž“αŸ…αž›αžΎαžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž™αž€ (AccessExclusiveLock) αžŠαŸ‚αž›αž“αžΉαž„αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαŸ†αžŽαž½αžšαž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αž“αŸαŸ‡αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΆαž“αž›αž‘αŸ’αž’αž—αžΆαž–αž”αž‰αŸ’αžˆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž¬αž•αŸ’αž“αŸ‚αž€αžšαž”αžŸαŸ‹αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αžαŸ’αž›αŸ‡ (αž–αžΈαžšαžΆαž”αŸ‹αžŸαž·αž”αž“αžΆαž‘αžΈαž‘αŸ…αž…αŸ’αžšαžΎαž“αž˜αŸ‰αŸ„αž„αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‘αŸ†αž αŸ†αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€) αž“αŸ„αŸ‡αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡αž‚αžΊαž›αŸ’αž’αž”αŸ†αž•αž»αžαŸ” αž‡αžΆαž’αž€αž»αžŸαž› αž™αžΎαž„αž˜αž·αž“αž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš VACUUM FULL αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžαŸ‚αž‘αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ„αŸ‡αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž˜αž·αž“αžŸαžΆαž€αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‘αŸαŸ”

αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžš αž€αŸ’αžšαž»αž˜ αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžΆαžšαžΆαž„αžαžΆαž˜αžšαž”αŸ€αž”αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„ VACUUM FULL αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž”αž›αžΎαžαžΆαžŸ (αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αž½αžšαžαŸ’αž˜αžΈαž‘αŸ)αŸ” αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαž½αžšαž˜αž½αž™αž…αŸ†αž“αž½αž“ - αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž…αŸ’αžšαžΎαž“αžαžΆαž˜αž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ” αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„ VACUUM FULL - αžœαžΆαž…αžΆαž€αŸ‹αžŸαŸ„αžαžΆαžšαžΆαž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžš REINDEX αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αž–αžΈαžšαž˜αž»αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž¬αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαžαžΆαžšαžΆαž„αž‘αžΎαž„αžœαž·αž‰αŸ” αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αž‚αžΊαžαŸ’αžŸαŸ„αž™αž‡αžΆαž„αž”αž“αŸ’αžαž·αž…αŸ– ShareLock αž“αŸ…αž›αžΎαžαž» (αž€αžΆαžšαž–αžΆαžšαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ) αž“αž·αž„ AccessExclusiveLock αž“αŸ…αž›αžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰ (αžšαžΆαžšαžΆαŸ†αž„αžŸαŸ†αžŽαž½αžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸαŸ‡)αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž‘αžΈ 12 αž“αŸƒ Postgres αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™αž”αžΆαž“αž›αŸαž…αž‘αžΎαž„ αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ”αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž˜αž·αž“αž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜ αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ αž¬αž›αž»αž”αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž˜αž»αž“αžšαž”αžŸαŸ‹ Postgres αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ REINDEX αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ αž”αž„αŸ’αž€αžΎαžαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ”. αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž…αžΆαž€αŸ‹αžŸαŸ„αž™αŸ‰αžΆαž„αžαžΉαž„αžšαžΉαž„ (ShareUpdateExclusiveLock αžŠαŸ‚αž›αž˜αž·αž“αž‡αŸ’αžšαŸ€αžαž‡αŸ’αžšαŸ‚αž€αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαž½αžšαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‡αŸ†αž“αž½αžŸαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž…αžΆαžŸαŸ‹αž‡αžΆαž˜αž½αž™αžαŸ’αž˜αžΈαž˜αž½αž™ αž“αž·αž„αž›αž»αž”αž›αž·αž”αž·αž€αŸ’αžšαž˜αž…αžΆαžŸαŸ‹αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŠαŸ„αž™αž˜αž·αž“αž‡αŸ’αžšαŸ€αžαž‡αŸ’αžšαŸ‚αž€αž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαžαžΆαž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‘αžΎαž„αžœαž·αž‰αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž”αž“αŸ’αž‘αž»αž€αž”αž“αŸ’αžαŸ‚αž˜αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αžšαž”αžŸαŸ‹αžŒαžΈαžŸαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αžΆαž“αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αžΆαžαŸ‹αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡ "αž—αŸ’αž›αžΆαž˜αŸ—" αž“αŸ„αŸ‡αž˜αž·αž“αž˜αžΆαž“αžαžΆαžšαžΆαž„αž‘αŸαŸ” αž“αŸαŸ‡αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαž„αž€αŸ’αžšαŸ…αž•αŸ’αžŸαŸαž„αŸ—αž…αžΌαž›αž˜αž€αž›αŸαž„αŸ– pg_repack (ធតីត pg_reorg), pgcompact, pgcompacttable αž αžΎαž™β€‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž–αž½αž€αž‚αŸαž‘αŸαž αžΎαž™αž“αžΉαž„αž“αž·αž™αžΆαž™αžαŸ‚αž’αŸ†αž–αžΈ pg_repack αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžαŸ’αž›αŸ‡αž™αžΎαž„αž”αŸ’αžšαžΎαžαŸ’αž›αž½αž“αž™αžΎαž„αŸ”

αžšαž”αŸ€αž”αžŠαŸ‚αž› pg_repack αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›
αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž™αžΎαž„αž˜αžΆαž“αžαžΆαžšαžΆαž„αž’αž˜αŸ’αž˜αžαžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ - αž‡αžΆαž˜αž½αž™αž›αž·αž”αž·αž€αŸ’αžšαž˜αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž“αž·αž„αž‡αžΆαž’αž€αž»αžŸαž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αŸ” αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž“αŸƒ pg_repack αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‚αž“αŸ’αž›αžΉαŸ‡αž“αžΉαž„αž…αž˜αŸ’αž›αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΆαž›αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αž·αž„αž›αž»αž”αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžαžΆαžšαžΆαž„αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αžŠαŸ‚αž›αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αžŠαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž“αž·αž„αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„ αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž™αžΊαžαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ pg_repack αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžαžΆαžšαžΆαž„αž…αžΆαžŸαŸ‹αž‘αŸ…αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈ αž…αŸ’αžšαŸ„αŸ‡αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αžΌαžœαž‡αž½αžšαžŠαŸαž€αžŠαŸ‚αž›αž˜αž·αž“αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαŸ” αž€αŸ†αž‘αž»αž„αž–αŸαž›αž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž€αž€αž»αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”

αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαž•αŸ’αž‘αŸαžšαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž›αžΎαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžŠαžŠαŸ‚αž›αŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“ αž αžΎαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαžαž»αžαž·αž…αž‡αžΆαž„ 20 αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» pg_repack αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ„αžŠαŸαžšαžΉαž„αž˜αžΆαŸ† αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž αž“αž·αž„αž‡αŸ†αž“αž½αžŸαžαžΆαžšαžΆαž„αž…αžΆαžŸαŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ Postgres αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž–αŸαž›αžœαŸαž›αžΆαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ αž“αž·αž„αžαŸ’αž›αžΈαž”αŸ†αž•αž»αž αžŠαŸ‚αž›αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžαž»αž”αžΆαž“αž‘αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸαŸ‡αžαžΆαžšαžΆαž„αž…αžΆαžŸαŸ‹αž“αž·αž„αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž αžΎαž™αž€αž“αŸ’αž›αŸ‚αž„αž‘αŸ†αž“αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αž›αŸ‚αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ”

αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž˜αžΎαž›αž‘αŸ…αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž? αž™αžΎαž„αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„ pg_repack αžŠαŸ„αž™αž˜αž·αž“αž•αŸ’αž‘αž»αž€ αž“αž·αž„αž€αŸ†αž–αž»αž„αž•αŸ’αž‘αž»αž€ αž αžΎαž™αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžˆαž”αŸ‹αž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αžαŸ‚ (αž“αž·αž™αžΆαž™αž˜αŸ’αž™αŸ‰αžΆαž„αž‘αŸ€αž αžŠαŸ„αž™αž”αŸ’αžšαžΎ Ctrl+C)αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αŸ”

αž™αžΎαž„αž”αžΆαž“αž‘αŸ…αž αžΆαž„αž›αž€αŸ‹αž’αžΆαž αžΆαžš - αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž˜αž·αž“αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ”

αž“αŸ†αž•αŸαž“αžαŸαž€αžŠαŸ†αž”αžΌαž„αžŠαžΆαž€αŸ‹αž›αž€αŸ‹

αž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜αž‘αžΈαž˜αž½αž™ αž™αžΎαž„αž”αžΆαž“αž‘αž‘αž½αž›αž€αŸ†αž αž»αžŸαž˜αž½αž™αž’αŸ†αž–αžΈαž€αžΆαžšαžšαŸ†αž›αŸ„αž—αž›αžΎαž€αž˜αŸ’αžšαž·αžαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ–

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸαŸ‡αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· index_16508 - αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ pg_repack αŸ” αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž›αž€αŸ’αžαžŽαŸˆαžŠαŸ‚αž›αž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž˜αžΆαžŸαž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆ αž™αžΎαž„αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αž˜αŸ’αžšαž·αž "αžšαž”αžŸαŸ‹αž™αžΎαž„" αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž“αžΉαž„αžœαžΆαŸ” αž”αž‰αŸ’αž αžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆ αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αž˜αŸ’αž˜αžαžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› (αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›αž€αŸ†αžŽαžαŸ‹), i.e. αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž™αžΊαžαž‡αžΆαž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ sql αžŠαŸ‚αž›αž“αžΆαŸ†αž‘αŸ…αžšαž€αž•αž›αžœαž·αž”αžΆαž€αžŠαŸ‚αž›αž˜αž·αž“αž“αžΉαž€αžŸαŸ’αž˜αžΆαž“αžŠαž›αŸ‹αŸ”

αž§αž”αžŸαž‚αŸ’αž‚αž–αž“αŸ’αž™αžΆαž–αŸαž›αŸ– αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž€αžΆαžš αž“αž·αž„αžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαž€αžΆαžš

αž‘αŸ’αžšαžΉαžŸαŸ’αžŠαžΈαžαžΌαž…αž˜αž½αž™αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαžΆαž€αŸ‹αž€αž˜αŸ’αžšαž·αžαž–αž“αŸ’αž™αžΆαž–αŸαž›αŸ”
αžŸαžΌαž˜αž–αž·αž…αžΆαžšαžŽαžΆαž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αŸ– αž™αžΎαž„αž˜αžΆαž“αžŸαŸ€αžœαž—αŸ…αž™αŸ„αž„αžαžΆαžšαžΆαž„αž“αŸƒαžšαžαž™αž“αŸ’αžαžŠαŸ‚αž›αž˜αžΆαž“αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž–αžΈαžš - αžˆαŸ’αž˜αŸ„αŸ‡αž“αž·αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž‘αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαŸ”
PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

create table cars
(
  name text constraint pk_cars primary key,
  ord integer not null constraint uk_cars unique
);



αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžαžΌαžšαž‘αžΆαž“αž‘αžΈαž˜αž½αž™ αž“αž·αž„αž‘αžΈαž–αžΈαžšαŸ” αžŠαŸ†αžŽαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αžαŸ’αžšαž„αŸ‹β€‹αž‚αžΊβ€‹αžαŸ’αžšαžΌαžœβ€‹αž’αŸ’αžœαžΎβ€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‘αžΈβ€‹αž˜αž½αž™β€‹αž‘αŸ…β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‘αžΈαž–αžΈαžš αž αžΎαž™β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‘αžΈαž–αžΈαžšβ€‹αž‘αŸ…β€‹αž›αŸαžβ€‹αž˜αž½αž™αŸ–

begin;
  update cars set ord = 2 where name = 'audi';
  update cars set ord = 1 where name = 'bmw';
commit;

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαž“αŸαŸ‡ αž™αžΎαž„αžšαŸ†αž–αžΉαž„αžαžΆαž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αž›αŸ„αž—αž›αžΎαž€αž˜αŸ’αžšαž·αžαž˜αž½αž™ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαžαž˜αŸ’αž›αŸƒαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‚αžΊαž˜αžΆαž“αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ–

[23305] ERROR: duplicate key value violates unique constraint β€œuk_cars”
Detail: Key (ord)=(2) already exists.

αžαžΎαžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαžαž»αžŸαž‚αŸ’αž“αžΆαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ? αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈ 1αŸ– αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‡αŸ†αž“αž½αžŸαžαž˜αŸ’αž›αŸƒαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžαžΆαž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αž§αž‘αžΆαž αžšαžŽαŸ "-XNUMX" αŸ” αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžŸαžšαžŸαŸαžšβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αŸβ€‹αž αŸ…β€‹αžαžΆ "αž€αžΆαžšβ€‹αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌαžšβ€‹αžαž˜αŸ’αž›αŸƒβ€‹αž“αŸƒβ€‹αž’αžαŸαžšβ€‹αž–αžΈαžšβ€‹αžαžΆαž˜β€‹αž˜αž½αž™β€‹αž—αžΆαž‚β€‹αž”αžΈ"αŸ” αž§αž”αžŸαž‚αŸ’αž‚αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž–αžΈαžšαŸ– αžšαž…αž“αžΆαžαžΆαžšαžΆαž„αž‘αžΎαž„αžœαž·αž‰αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αŸ†αžŽαž»αž…αž’αžŽαŸ’αžαŸ‚αžαž‘αžΉαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αž›αŸƒαž›αŸ†αžŠαžΆαž”αŸ‹αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžαž˜αŸ’αž›αŸƒαž–αžΈ 1 αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž‘αŸ… 2.5 αž’αžΆαžαž»αž‘αžΈαž˜αž½αž™αž“αžΉαž„ "ឈរ" αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžšαžœαžΆαž„αž‘αžΈαž–αžΈαžš αž“αž·αž„αž‘αžΈαž”αžΈαŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž–αžΈαžšαŸ” αžŠαŸ†αž”αžΌαž„ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αŸ” αž‘αžΈαž–αžΈαžš αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αž…αŸ†αž“αž½αž“αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“ αž˜αž»αž“αž–αŸαž›αž‚αžŽαž“αžΆαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈ 3αŸ– αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αžαŸ‚αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαŸ–

create table cars
(
  name text constraint pk_cars primary key,
  ord integer not null constraint uk_cars unique deferrable initially deferred
);

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸƒαžŸαŸ†αžŽαžΎαžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž’αžΆαž“αžΆαžαžΆαžαž˜αŸ’αž›αŸƒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž˜αžΆαž“αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸ…αž–αŸαž›αž“αŸƒαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž“αŸ„αŸ‡αžœαžΆαž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™αŸ”

αž§αž‘αžΆαž αžšαžŽαŸβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž–αž·αž—αžΆαž€αŸ’αžŸαžΆβ€‹αžαžΆαž„β€‹αž›αžΎβ€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžŸαŸ†αž™αŸ„αž‚β€‹αžŽαžΆαžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžœαžΆβ€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž–αžΈβ€‹αž‚αŸ†αž“αž·αžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αŸ’αžšαžΎαž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αžœαžαŸ’αžαž»αž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžšαŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž”αŸ‚αž”αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αžΆαž“αŸ‹αžαŸ‚αžŸαžΆαž˜αž‰αŸ’αž‰αž”αž“αŸ’αžαž·αž…αŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž§αž”αžŸαž‚αŸ’αž‚ Postgres αž˜αžΆαž“αž”αžΈαž€αž˜αŸ’αžšαž·αžαž“αŸƒ granularity αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž–αž½αž€αžœαžΆαŸ– αž‡αž½αžšαžŠαŸαž€ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαž€αž“αŸ’αžŸαŸ„αž˜αŸ”
PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›
αž”αŸ’αžšαž—αž–: αž’αŸ’αž“αž€αžŸαž»αŸ†αž‘αžΆαž“

αž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αž˜αž·αž“αž˜αŸ‚αž“ NULL αžαŸ‚αž„αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΈαž€αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž‡αž½αžšαžŠαŸαž€ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŠαžΌαž…αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈαžαžΆαžšαžΆαž„ αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž„αŸ’αžαŸαž”αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž” αž§αž”αžŸαž‚αŸ’αž‚αžŠαŸ‚αž›αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž½αž™αž…αŸ†αž“αž½αž“αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΌαžŠαžŠαŸ‚αž›αž’αžΆαž…αž’αžΆαž“αž”αžΆαž“αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ αž“αž·αž„αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαž·αž…αž‡αžΆαž„αž˜αž»αž“αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž…αŸ†αžŽαžΆαž™αž›αžΎαžœαžΆαžŠαŸ„αž™αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ αž–αŸ’αžšαŸ„αŸ‡αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αž αž»αžŸαž€αžΎαžαž‘αžΎαž„ αž αžΎαž™αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž’αŸ†αž–αžΈαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ‚αž€αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆαŸ” αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž˜αž½αž™αž‘αŸ€αžαž“αŸ„αŸ‡αž‚αžΊαžαžΆ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž’αžΆαž…αž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž•αŸ‚αž“αž€αžΆαžšαžŠαŸαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž”αžΆαž“αž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸ†αžŽαžΎαž“αŸ„αŸ‡αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›αŸ”

αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’ pg_repack

αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžšαŸ‰αžΆαž”αŸ‹αžšαž„β€‹αž“αžΌαžœβ€‹αž§αž”αžŸαž‚αŸ’αž‚β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž–αž“αŸ’αž™αžΆαžšαž–αŸαž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαžΎβ€‹αžœαžΆβ€‹αž‘αžΆαž€αŸ‹αž‘αž„β€‹αž“αžΉαž„β€‹αž”αž‰αŸ’αž αžΆβ€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”αžŽαžΆ? αž…αžΌαžšαž™αžΎαž„αž…αž„αž…αžΆαŸ†αž“αžΌαžœαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž‘αž‘αž½αž›αž–αžΈαž˜αž»αž“αŸ–

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

αžœαžΆαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αž–αžΈαžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‘αŸ…αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαŸ” αž“αŸαŸ‡β€‹αž˜αžΎαž›β€‹αž‘αŸ…β€‹αž…αž˜αŸ’αž›αŸ‚αž€β€‹αž–αŸ’αžšαŸ„αŸ‡... αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž”αŸ’αžšαž—αž–αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž”αŸ†αž–αŸαž‰αž“αžΌαžœαž§αž”αžŸαž‚αŸ’αž‚αž“αŸƒαžαžΆαžšαžΆαž„αžŠαžΎαž˜ αžαžΎαž–αž½αž€αž‚αŸαž’αžΆαž…αž”αŸ†αž–αžΆαž“αž›αžΎαž§αž”αžŸαž‚αŸ’αž‚αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž«αžŸαž‚αž›αŸ‹αž“αŸƒαž”αž‰αŸ’αž αžΆαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž˜αž»αž“αžšαž”αžŸαŸ‹ pg_repack αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαžαŸ‚αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž§αž”αžŸαž‚αŸ’αž‚αž‘αŸαŸ– αžαžΆαžšαžΆαž„αž…αžΆαžŸαŸ‹αž˜αžΆαž“αž§αž”αžŸαž‚αŸ’αž‚αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ αž αžΎαž™αžαŸ’αž˜αžΈαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‡αŸ†αž“αž½αžŸαžœαž·αž‰αŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αžœαžΆαž‡αžΆαžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž§αž”αžŸαž‚αŸ’αž‚αž‚αžΊαž’αž˜αŸ’αž˜αžαžΆ αž αžΎαž™αž˜αž·αž“αž–αž“αŸ’αž™αžΆαž–αŸαž›αž‘αŸ αž“αŸ„αŸ‡αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αŸ†αž“αž½αžŸαžœαž·αž‰αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„αž§αž”αžŸαž‚αŸ’αž‚αž“αŸαŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡ αž§αž”αžŸαž‚αŸ’αž‚αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Postgres αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› αž₯αžšαž·αž™αžΆαž”αžαž‚αžΊαž˜αž·αž“αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αž·αž“αž’αžΆαž…αž–αž“αŸ’αž™αžΆαž–αŸαž›αž”αžΆαž“ αž αžΎαž™αžαŸ‚αž„αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž“αŸ…αž–αŸαž›αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ sql αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž”αž‰αŸ’αž αžΆαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ "αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›" αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ– αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžŠαžΎαž˜αžœαžΆαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžš αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž‡αžΆ sql αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαŸ– αžαŸ‚αž„αžαŸ‚αž–αž“αŸ’αž™αžΆαžšαž–αŸαž› αž¬αž—αŸ’αž›αžΆαž˜αŸ—αž—αŸ’αž›αžΆαž˜αŸ—αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαžΎαž™αžΎαž„αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡?

αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›

αž‚αŸ†αž“αž·αžαžŠαŸ†αž”αžΌαž„αž‚αžΊαžαŸ’αžšαžΌαžœαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž—αŸ’αž›αžΆαž˜αŸ—αŸ” αžœαžΆαž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž˜αž·αž“αž–αž·αžαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαžΌαž… αž“αŸαŸ‡αž˜αž·αž“αž‚αž½αžšαž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αž€αžΆαžšαž”αŸ‰αŸ‡αž‘αž„αŸ’αž‚αž·αž…αž”αŸ‚αž”αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž˜αŸ’αž˜αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž‚αŸαŸ” αž–αž½αž€αžœαžΆαž€αžΎαžαž‘αžΎαž„αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈαžšαž“αžΆαž€αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž‘αžΈαž–αžΈαžšαž˜αž·αž“αž˜αžΆαž“αž–αŸαž›αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αžšαž½αž…αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΈαž˜αž½αž™αŸ” αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ‚αž”αž“αŸαŸ‡ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αžŠαž·αžŸαŸαž’αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΈαž–αžΈαžš αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αžšαžΆαžšαžΆαŸ†αž„αž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αŸ” αž”αž“αŸ’αžαž·αž…αž€αŸ’αžšαŸ„αž™αž˜αž€ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΈαž˜αž½αž™αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž› αž‘αžΈαž–αžΈαžšαž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžαžΆαž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„ αž αžΎαž™αž“αžΉαž„αž’αžΆαž…αž’αŸ’αžœαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž˜αŸ’αžαž„αž‘αŸ€αžαŸ”

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αžΊαžαŸ‚αž„αžαŸ‚αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž˜αž·αž“αž–αž“αŸ’αž™αžΆαžš αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ’αž˜αžΈαžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αžŠαžΎαž˜αŸ–

CREATE UNIQUE INDEX CONCURRENTLY uk_tablename__immediate ON tablename (id, index);
-- run pg_repack
DROP INDEX CONCURRENTLY uk_tablename__immediate;

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„ αž™αžΎαž„αž”αžΆαž“αž‘αž‘αž½αž›αžαŸ‚αž€αŸ†αž αž»αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ” αž‡αŸ„αž‚αž‡αŸαž™! αž™αžΎαž„αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš pg_repack αž˜αŸ’αžαž„αž‘αŸ€αžαž›αžΎαž€αžΆαžšαž•αž›αž·αž αž αžΎαž™αž‘αž‘αž½αž›αž”αžΆαž“ 5 αž€αŸ†αž αž»αžŸαž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ†αž”αžΌαž„αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αž˜αŸ‰αŸ„αž„αž“αŸƒαž€αžΆαžšαž„αžΆαžšαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžšαž½αž…αž αžΎαž™αž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜αž‘αžΈαž–αžΈαžš αž…αŸ†αž“αž½αž“αž“αŸƒαž€αŸ†αž αž»αžŸαž”αžΆαž“αž€αžΎαž“αž‘αžΎαž„αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αžˆαž”αŸ‹ pg_repack αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžœαžΆαž€αžΎαžαž‘αžΎαž„? αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αŸ†αž αž»αžŸαž€αžΎαžαž‘αžΎαž„αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž…αŸ†αž“αž½αž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž’αžΆαžαž»αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ” αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αžαž·αž…αž‡αžΆαž„αž…αŸ’αžšαžΎαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ†αž”αžΌαž„αž‡αžΆαž„αž“αŸ…αž›αžΎαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž–αŸ„αž›αž‚αžΊαž§αŸ” αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚ "αžŸαŸ†αžŽαžΆαž„" αŸ”

αž‚αŸ†αž“αž·αžαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αž“αŸ…αž…αŸ†αžŽαž»αž…αž“αŸ„αŸ‡ αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αžΈαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ– αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΎαž„αžœαž·αž‰ αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸ‚αž€αž…αžΆαž™αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› ឬ "αž”αž„αŸ’αžšαŸ€αž“" pg_repack αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž™αžΎαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‘αžΈαž–αžΈαžšαŸ”

αž‡αŸ†αž“αž½αžŸβ€‹αž›αž·αž”αž·αž€αŸ’αžšαž˜β€‹αž€αŸ’αž“αž»αž„β€‹αžαžΆαžšαžΆαž„β€‹αžαŸ’αž˜αžΈβ€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž€αžΆαžšβ€‹αž–αž“αŸ’αž™αžΆαžšβ€‹αž–αŸαž›β€‹αž–αžΈβ€‹αžαžΆαžšαžΆαž„β€‹αžŠαžΎαž˜

αž‚αŸ„αž›αž”αŸ†αžŽαž„αž“αŸƒαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž‚αžΊαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαžΆαžšαžΆαž„αžŠαžΎαž˜αž˜αžΆαž“αž§αž”αžŸαž‚αŸ’αž‚αž–αž“αŸ’αž™αžΆαžš αž“αŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž§αž”αžŸαž‚αŸ’αž‚αž”αŸ‚αž”αž“αŸαŸ‡ αž˜αž·αž“αž˜αŸ‚αž“αž›αž·αž”αž·αž€αŸ’αžšαž˜αž‘αŸαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αŸ–

  • αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αž αž·αžαž–αž“αŸ’αž™αžΆαž–αŸαž› αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž˜αž½αž™;
  • αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸ‚αž›αž”αŸ‰αŸ‡αž‘αž„αŸ’αž‚αž·αž…αž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹;
  • αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– - αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸ‚αž„αž˜αžΆαž“αž‡αž˜αŸ’αž›αŸ„αŸ‡αž‘αŸ€αžαž αžΎαž™αŸ”
  • αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”

create table test_table
(
  id serial,
  val int,
  constraint uk_test_table__val unique (val) deferrable initially deferred 
);

INSERT INTO test_table (val) VALUES (0);
FOR i IN 1..10000 LOOP
  BEGIN
    INSERT INTO test_table VALUES (0) RETURNING id INTO v_id;
    UPDATE test_table set val = i where id = v_id;
    COMMIT;
  END;
END LOOP;

αž€αŸ†αžŽαŸ‚αžŠαžΎαž˜αžšαž”αžŸαŸ‹ pg_repack αžαŸ‚αž„αžαŸ‚αž‚αžΆαŸ†αž„αž“αŸ…αž›αžΎαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžŠαŸ†αž”αžΌαž„ αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ” αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αŸ”

αž™αžΎαž„αž‘αŸ…αž•αž›αž·αžαž€αž˜αŸ’αž˜ αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αž αž»αžŸαž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‘αŸ…αžαŸ’αž˜αžΈαž˜αž½αž™αŸ–

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž»αžšαžΆαžŽαŸ– αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜αž‘αŸ?!

APPLY_COUNT αž“αž·αž„αž”αŸ’αžšαžŸαž–αŸ’αžœαž“αŸƒαž”αžΆαž…αŸ‹αž–αžΈαžš

αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαž·αž—αžΆαž‚αž€αžΌαžŠαžαžΆαž˜αž–αŸ’αž™αž‰αŸ’αž‡αž“αŸˆαžαžΆαž˜αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αŸ– αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž–αžΈαžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‘αŸ…αžαŸ’αž˜αžΈαž˜αž½αž™αž‡αžΆαž”αžΆαž…αŸ‹ ថេរ APPLY_COUNT αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž‘αŸ†αž αŸ†αž“αŸƒαž”αžŽαŸ’αžαž»αŸ†αŸ–

for (;;)
{
num = apply_log(connection, table, APPLY_COUNT);

if (num > MIN_TUPLES_BEFORE_SWITCH)
     continue;  /* there might be still some tuples, repeat. */
...
}

αž”αž‰αŸ’αž αžΆαž‚αžΊαžαžΆ αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΎαž˜ αžŠαŸ‚αž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž’αžΆαž…αž”αŸ†αž–αžΆαž“αž›αžΎαž§αž”αžŸαž‚αŸ’αž‚ αž“αŸ…αž–αŸαž›αž•αŸ’αž‘αŸαžš αž’αžΆαž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž…αŸ†αž“αž»αž…αž”αŸ’αžšαžŸαž–αŸ’αžœαž“αŸƒαž€αŸ’αžšαž»αž˜αž–αžΈαžš - αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžΆαž…αŸ‹αž‘αžΈαž˜αž½αž™ αž αžΎαž™αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž‘αŸ€αž αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαž–αžΈαžšαŸ” αž αžΎαž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžŸαŸ†αžŽαžΆαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αžšαž»αž˜αž˜αž·αž“αž”αŸ†αž–αžΆαž“αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž‘αžΈαž˜αž½αž™ αž“αŸ„αŸ‡αž’αŸ’αžœαžΈαŸ—αž‚αžΊαž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎ αž“αŸ„αŸ‡αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αžΎαžαž‘αžΎαž„αŸ”

APPLY_COUNT αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„ 1000 αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αžŠαŸ‚αž›αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™ - αž–αž½αž€αž‚αŸαž˜αž·αž“αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžšαžŽαžΈ "αž”αŸ’αžšαžŸαž–αŸ’αžœαž‡αžΆαž”αžΆαž…αŸ‹" αž‘αŸαŸ” αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž–αžΈαžš - αž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž…αŸ†αž“αž½αž“ 500 αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž–αžΈαžšαžαŸ‚αž„αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž”αžΆαž…αŸ‹αž˜αž½αž™ αž αžΎαž™αž™αžΎαž„αž˜αž·αž“αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž”αž‰αŸ’αž αžΆαž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž‘αžΈαž–αžΈαžš αž€αžΆαžšαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αžˆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

FOR i IN 1..10000 LOOP
  BEGIN
    INSERT INTO test_table VALUES (1) RETURNING id INTO v_id;
    UPDATE test_table set val = i where id = v_id;
    UPDATE test_table set val = i where id = v_id; -- one more update
    COMMIT;
  END;
END LOOP;

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αž·αž…αŸ’αž…αž€αžΆαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžαžΆαžšαžΆαž„αžŠαžΎαž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž½αž™ αž”αž‰αŸ’αž…αž”αŸ‹αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈαž•αž„αžŠαŸ‚αžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž½αž™αŸ”

αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž–αžΈαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†

αž αžΎαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž™αžΎαž„αž˜αžΆαž“αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αžΈαžšαŸ” αž‘αžΈαž˜αž½αž™αŸ– αž…αžΌαžšαž™αžΎαž„αž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αžΌαžœαž€αžΆαžšαž…αŸ‚αž€αž‡αžΆαž”αžΆαž…αŸ‹ αž“αž·αž„αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž½αž™αŸ” αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸαŸ‡αž‚αžΊαž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αžšαž”αžŸαŸ‹αžœαžΆ - αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΌαžŠαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαžαž·αž…αžαž½αž… (αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹ pg_reorg αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž“αŸ„αŸ‡) αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž˜αž½αž™ - αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸαž™αžΌαžšαž’αž„αŸ’αžœαŸ‚αž„ αž αžΎαž™αž“αŸαŸ‡ αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž“αž·αž™αžΆαž™αž–αžΈαž˜αž»αž“ αž‚αžΊαž‡αžΆαž€αžΆαžšαž‚αŸ†αžšαžΆαž˜αž€αŸ†αž αŸ‚αž„αžŠαž›αŸ‹αž€αžΆαžšαž›αŸαž…αž…αŸαž‰αž“αžΌαžœαž—αžΆαž–αž αžΎαž˜αž–αŸ„αŸ‡αžαŸ’αž˜αžΈαŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΈαž–αžΈαžšαž‚αžΊαžŸαŸ’αž˜αž»αž‚αŸ’αžšαžŸαŸ’αž˜αžΆαž‰αž‡αžΆαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‡αžΆαž„αž“αŸαŸ‡αŸ– αž”αž„αŸ’αž€αžΎαžαž‡αž½αžšαžˆαžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž“αŸ…αž–αŸαž›αž™αžΎαž„αž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž™αžΎαž„αž’αžΆαž…αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžαžΆαž˜αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž“αŸαŸ‡ αž αžΎαž™αž’αžΆαž“αžΆαžαžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαŸ” αž”αžŽαŸ’αžαž»αŸ†αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“ (αž¬αž˜αž½αž™αž’αŸ†) αž αžΎαž™αž‘αŸ†αž αŸ†αžšαž”αžŸαŸ‹αžœαžΆαž“αžΉαž„αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αžœαžΆαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž…αŸƒαžŠαž“αŸ’αž™αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž’αžΆαž“αžœαžΆαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαžΌαž…αž–αžΈαž˜αž»αž“αž‘αŸ€αžαž‘αŸαŸ” seqscan αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž“αžΈαž˜αž½αž™αŸ—αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαŸ’αžšαž„αžŠαŸ„αž™ tx_id αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž–αŸαž€ αž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž€αŸαž“αžΉαž„αž”αž“αŸ’αžαž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž•αž„αžŠαŸ‚αžš αžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαžœαžΆαž›αžΎαžŸαž€αž˜αŸ’αžšαž·αžαŸ” αž‡αžΆαž‘αžΌαž‘αŸ…αžŠαžΌαž…αžšαžΆαž›αŸ‹αžŠαž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž›αŸ‡αž”αž„αŸ‹αž’αŸ’αžœαžΈαž˜αž½αž™αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž αžΎαž™β€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αž™αžΎαž„β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžŠαžΎαž˜β€‹αž‡αžΆαž˜αž½αž™β€‹αž‡αž˜αŸ’αžšαžΎαžŸβ€‹αžŠαŸ†αž”αžΌαž„β€‹αž–αŸ’αžšαŸ„αŸ‡β€‹αžœαžΆβ€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž‡αžΆαž„αŸ” αž‡αžΆαžŠαŸ†αž”αžΌαž„αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αžαžΆαžαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸαž™αžΌαžšαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž”αž‰αŸ’αž αžΆαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžαžΆαžšαžΆαž„αž…αžΆαžŸαŸ‹αž‘αŸ…αžαŸ’αž˜αžΈαž˜αž½αž™αž€αŸαž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸαžœαŸ‚αž„αž˜αž½αž™ αžŸαŸ†αžŽαž½αžšαž”αžΆαž“αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆ "αžαžΎαž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸαŸ‡αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“?" αžšαž™αŸˆαž–αŸαž›αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ†αž”αžΌαž„αž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž‡αžΆαž…αž˜αŸ’αž”αž„αž›αžΎαž‘αŸ†αž αŸ†αž“αŸƒαžαžΆαžšαžΆαž„αŸ” αžαž·αžšαžœαŸαž›αžΆαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αž˜αžΈαž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž…αŸ†αž“αž½αž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž€αž€αž€αž»αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž€αŸ†αž‘αž»αž„αž–αŸαž›αž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž–αŸ„αž›αž‚αžΊαž§αŸ” αž“αŸ…αž›αžΎαž’αžΆαŸ†αž„αžαž„αŸ‹αžŸαŸŠαžΈαžαŸαž“αŸƒαž”αž“αŸ’αž‘αž»αž€αŸ” αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš pg_repack αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž αž αžΎαž™αž”αžšαž·αž˜αžΆαžŽαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αžΊαžαžΌαž…αž˜αž·αž“αžŸαž˜αžΆαž˜αžΆαžαŸ’αžšαž’αŸ€αž”αž“αžΉαž„αž‘αŸ†αž αŸ†αžŠαžΎαž˜αž“αŸƒαžαžΆαžšαžΆαž„αŸ” αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαŸαžŸαž”αŸ’αžšαž αŸ‚αžŸαž–αŸαž›αžœαŸαž›αžΆαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž˜αžΈ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž’αŸ’αž™αž˜αžœαžΆαž‚αžΊ 1 αž˜αŸ‰αŸ„αž„ 2-3 αž“αžΆαž‘αžΈ) αŸ”

αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž˜αžΆαž“αž—αžΆαž–αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αŸ” αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αž›αž·αžαž€αž˜αŸ’αž˜αž•αž„αžŠαŸ‚αžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ„αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹ αž“αŸαŸ‡αž‡αžΆαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž˜αžΆαž“αž‘αŸ†αž αŸ†αž“αŸƒ databases αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

PostgresαŸ– αž αžΎαž˜αž–αŸ„αŸ‡ pg_repack αž“αž·αž„αž–αž“αŸ’αž™αžΆαž–αŸαž›

αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž–αŸαž‰αž…αž·αžαŸ’αžαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸαŸ‡ αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαžœαž·αž’αžΈαž‘αžΈαž–αžΈαžšαž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž€αŸ†αž–αž»αž„αž–αž·αž…αžΆαžšαžŽαžΆαž’αŸ†αž–αžΈαž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžœαžΆαž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αŸ” αž‡αžΆαž’αž€αž»αžŸαž› αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αž·αž“αž‘αžΆαž“αŸ‹αžšαž½αž…αžšαžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžš αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ†αžŽαŸ‡αž–αŸαž‰αž›αŸαž‰ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž“αžΉαž„αž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαž”αžΆαž“αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ”

αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αž“αž€αž˜αžΆαž“αžŸαŸ†αžŽαž½αžšαž˜αž½αž™ αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αžšαžΏαž„αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ pg_repack αž αžΎαž™αž§αž‘αžΆαž αžšαžŽαŸαž˜αž·αž“αž”αŸ’αžšαžΎ analogues αžšαž”αžŸαŸ‹αžœαžΆ? αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡ αž™αžΎαž„αž€αŸαž”αžΆαž“αž‚αž·αžαž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαžΆαž–αžΈαž˜αž»αž“αž˜αž€ αž“αŸ…αž›αžΎαžαž»αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž§αž”αžŸαž‚αŸ’αž‚αžšαžΆαžšαžΆαŸ†αž„ αž”αžΆαž“αž‡αŸ†αžšαž»αž‰αž±αŸ’αž™αž™αžΎαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž”αž‰αŸ’αž αžΆ αž“αž·αž„αž‡αž½αžŸαž‡αž»αž›αžœαžΆαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž€αŸαž‘αžΆαž˜αž‘αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž•αž„αžŠαŸ‚αžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž‘αžΎαž”αž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆ αž™αžΎαž„αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž‡αžΆαž˜αž»αž“αžŸαž·αž“ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αžŠαžΉαž„αžαžΆαž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαž”αŸ‚αž”αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž–αŸαž›αžœαŸαž›αžΆαžŸαž˜αžšαž˜αŸ’αž™αž“αŸ„αŸ‡ αž™αžΎαž„αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αžΎαž› analogues αŸ” .

αž€αžΆαžšαžšαž€αžƒαžΎαž‰

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αžŽαŸ‚αž“αžΆαŸ†αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

  1. αžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž’αŸ’αž“αž€αž’αžΆαž…αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› autovacuum αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αžΆαž“αž›αŸ’αž’αŸ”
  2. αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœ AUTOVACUUM αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž—αžΆαž–αž αžΎαž˜αž–αŸ„αŸ‡αž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αŸ”
  3. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž αžΎαž˜αž–αŸ„αŸ‡αž“αŸ…αžαŸ‚αž€αžΎαž“αž‘αžΎαž„ αž αžΎαž™αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž™αž€αžˆαŸ’αž“αŸ‡αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž€αŸ’αžšαŸ…αž”αŸ’αžšαž’αž”αŸ‹ αž€αž»αŸ†αžαŸ’αž›αžΆαž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαž„αž€αŸ’αžšαŸ…αŸ” αžšαžΏαž„αž…αŸ†αž”αž„αž‚αžΊαžαŸ’αžšαžΌαžœαžŸαžΆαž€αž›αŸ’αž”αž„αž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž±αŸ’αž™αž”αžΆαž“αž›αŸ’αž’αŸ”
  4. αž€αž»αŸ†αžαŸ’αž›αžΆαž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž„αž€αŸ’αžšαŸ…αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ - αž–αŸαž›αžαŸ’αž›αŸ‡αžœαžΆαž’αžΆαž…αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž„ αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαž€αžΌαžŠαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹