Machine: CPU - 4 core RAM - 24GB OS - SUSE 11 SP2 Configurations: Encoding - SQL_ASCII lc-collate - C lc-ctype - C Sharedbuffers - 4GB walbuffers - 16MB synchronous_commit - off checkpoint_segments - 255 checkpoint_timeout - 25min postgres orginal: testname | wal_generated | duration -----------------------------------------+---------------+--------------------- two short fields, no change | 1232911824 | 33.7404279708862 two short fields, one changed | 1235281312 | 34.8537929058075 two short fields, both changed | 1239363432 | 34.3014531135559 one short and one long field, no change | 1042332872 | 22.7840487957001 ten tiny fields, all changed | 1395194096 | 40.8829860687256 hundred tiny fields, first 10 changed | 627096488 | 21.3006088733673 hundred tiny fields, all changed | 629783320 | 21.3595271110535 hundred tiny fields, half changed | 633205616 | 21.3571240901947 hundred tiny fields, half nulled | 557708272 | 19.0501129627228 (18 rows) postgres pglz micro optimization : testname | wal_generated | duration -----------------------------------------+---------------+--------------------- two short fields, no change | 1232906272 | 33.4661350250244 two short fields, one changed | 1232911168 | 34.4788658618927 two short fields, both changed | 1235895248 | 35.3673360347748 one short and one long field, no change | 650511800 | 19.5800747871399 ten tiny fields, all changed | 1314953608 | 40.5301380157471 hundred tiny fields, first 10 changed | 450740312 | 20.1905128955841 hundred tiny fields, all changed | 622166192 | 23.1459269523621 hundred tiny fields, half changed | 626984592 | 23.8179430961609 hundred tiny fields, half nulled | 485176552 | 20.2024641036987 (18 rows) Approach-1: testname | wal_generated | duration -----------------------------------------+---------------+------------------ two short fields, no change | 1234639752 | 34.2664721012115 two short fields, one changed | 1236601960 | 34.1679780483246 two short fields, both changed | 1239082008 | 35.9739248752594 one short and one long field, no change | 670450584 | 18.6086890697479 ten tiny fields, all changed | 1323152448 | 40.7262811660767 hundred tiny fields, first 10 changed | 492801672 | 18.7420890331268 hundred tiny fields, all changed | 624762760 | 23.1158690452576 hundred tiny fields, half changed | 622841712 | 24.0897719860077 hundred tiny fields, half nulled | 485637680 | 18.5576410293579 (18 rows) Approach-2: testname | wal_generated | duration -----------------------------------------+---------------+--------------------- two short fields, no change | 1232904432 | 33.7109620571136 two short fields, one changed | 1232910808 | 33.6471281051636 two short fields, both changed | 1241947920 | 34.6148889064789 one short and one long field, no change | 725168968 | 24.0321550369263 ten tiny fields, all changed | 1314958304 | 38.3922109603882 hundred tiny fields, first 10 changed | 482433176 | 18.5007598400116 hundred tiny fields, all changed | 621361560 | 23.2580668926239 hundred tiny fields, half changed | 626063664 | 24.1767821311951 hundred tiny fields, half nulled | 485984016 | 20.1690690517426 (18 rows) Approach-3: testname | wal_generated | duration -----------------------------------------+---------------+------------------ two short fields, no change | 1232907520 | 34.2172980308533 two short fields, one changed | 1236164288 | 33.5663039684296 two short fields, both changed | 1232907712 | 34.2262949943542 one short and one long field, no change | 725166528 | 25.7863790988922 ten tiny fields, all changed | 1314954160 | 40.4585711956024 hundred tiny fields, first 10 changed | 488342552 | 18.8520789146423 hundred tiny fields, all changed | 629967400 | 23.1665799617767 hundred tiny fields, half changed | 624417856 | 23.8376679420471 hundred tiny fields, half nulled | 484111448 | 18.5801899433136 (18 rows)