DBAαŸ– αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž€αž·αž…αŸ’αž…αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ αž“αž·αž„αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›

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

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

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

1. αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“?

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

៑.៑. αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ (αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“)

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

"namespace" αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ CREATE TABLE xαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“ αž€αŸ†αž αž»αžŸαž˜αž·αž“αž―αž€αŸ„ αžœαžαŸ’αžαž»αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αžΆαŸ†αž„αž–αžΈαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· CREATE TEMPORARY TABLE xαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‘αžΆαŸ†αž„αž–αžΈαžšαž“αžΉαž„αž’αŸ’αžœαžΎαžœαžΆαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž αžΎαž™αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“ αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžαž»αŸ” αž αžΎαž™β€‹αž“αžΉαž„β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αžšαžœαžΆαž„β€‹αž–αž½αž€αž‚αŸβ€‹αž‘αŸαŸ”

"αž”αŸ†αž•αŸ’αž›αžΆαž‰αžαŸ’αž›αž½αž“αž―αž„" αž“αŸ…αž–αŸαž›αž•αŸ’αžαžΆαž…αŸ‹

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘ αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαŸ„αž™αžŠαŸƒ DROP TABLE x αž‚αŸ’αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αž’αŸ’αžœαžΈαž€αŸ’αžšαŸ…αž–αžΈ...

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆ pgbouncer αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž“αŸ’αžαž‡αžΏαžαžΆαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸαŸ‡αž“αŸ…αžαŸ‚αžŸαž€αž˜αŸ’αž˜ αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸαŸ‡αž“αŸ…αžαŸ‚αž˜αžΆαž“αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž„αŸ’αž€αžΎαžαžœαžΆαž˜αŸ’αžαž„αž‘αŸ€αž αž–αžΈαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ… pgbouncer αž“αžΉαž„αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ€αžŸαžœαžΆαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ CREATE TEMPORARY TABLE IF NOT EXISTS x.

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

αž˜αž·αž“αž…αž˜αŸ’αž›αž„

αžŠαŸ„αž™αžŸαžΆαžšαž–αž½αž€αžœαžΆαž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚ αž“αŸαŸ‡αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžšαžŠαž„ αž“αŸ…αž€αŸ’αž“αž»αž„ heap + WAL αžŠαžΌαž…αŸ’αž“αŸαŸ‡ INSERT/UPDATE/DELETE αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αžΏαž“αž‡αžΆαž„αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ”

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

៑.្. αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αž½αžšαž’αŸ’αžœαžΎ αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš ETL αžŠαŸαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αž˜αžΆαž“ pgbouncer αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš? ..

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

αž¬αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž›αŸ‡αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž’αžŸαž˜αž€αžΆαž› αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ? ..

αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡ - αž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“. Pun αž”αžΆαž‘αŸ” αž“αŸ„αŸ‡αž‚αžΊαŸ–

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

αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡ - αžšαž»αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž½αž“αŸ” αžαžΆαž˜αž–αž·αžαž‘αŸ… αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL αž€αžΎαžαž‘αžΎαž„αž–αžΈαžšαžŠαž„ - αž‘αžΈαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ WALαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„/αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαŸ” αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΆαŸ†αž‘αŸ’αžš ACID αž“αž·αž„αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαžœαžΆαž„ COMMIT' nutty αž“αž·αž„ ROLLBACK'αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αŸ’αž˜αžΆαž“αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸαŸ‡αž‘αŸ! αž™αžΎαž„αž˜αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž› αž‘αŸ„αŸ‡β€‹αž”αžΈβ€‹αž‡αžΆβ€‹αžœαžΆβ€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž‡αŸ„αž‚αž‡αŸαž™β€‹αž‘αžΆαŸ†αž„β€‹αžŸαŸ’αžšαž»αž„ αž¬β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαŸαž…αŸ”. αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαžαžΆαžαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž“αžΉαž„αž˜αžΆαž“αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αŸ„αŸ‡αž‘αŸ - αž™αžΎαž„αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„ "αž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΈαž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›" αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαžœαžΆαž“αŸ…αž―αžŽαžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ PostgreSQL αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚ 9.1 αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αžšαžΏαž„αžŠαžΌαž…αž‡αžΆ αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡:

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αž“αŸαŸ‡ αžαžΆαžšαžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆ unlogged αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αžŠαŸ‚αž›β€‹αžŸαžšαžŸαŸαžšβ€‹αž‘αŸ…β€‹αžαžΆαžšαžΆαž„β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž…αžΌαž›β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž…αžΌαž›β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžŸαžšαžŸαŸαžšβ€‹αž‘αž»αž€β€‹αž˜αž»αž“β€‹αž‘αŸ (αžŸαžΌαž˜β€‹αž˜αžΎαž›β€‹αž‡αŸ†αž–αžΌαž€β€‹αž‘αžΈ 29) αžŠαŸ‚αž›β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžαžΆαžšαžΆαž„β€‹αžŠαžΌαž…β€‹αž‡αžΆ αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΏαž“αž‡αžΆαž„αž’αž˜αŸ’αž˜αžαžΆαŸ”. αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆ, αž–αž½αž€αž‚αŸαž˜αž·αž“αž˜αžΆαž“αž—αžΆαž–αžŸαŸŠαžΆαŸ†αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™; αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αžšαžΆαž‡αŸαž™ αž¬αž€αžΆαžšαž”αž·αž‘αž‡αžΆαž”αž“αŸ’αž‘αžΆαž“αŸ‹ αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αžΌαž› αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·. αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αžΌαž› αž˜αž·αž“αž”αžΆαž“αž…αž˜αŸ’αž›αž„ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαžŸαŸαžœαžΆαž”αž˜αŸ’αžšαžΎαŸ” αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αžΌαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžαŸ’αž›αžΈ αžœαžΆαž“αžΉαž„αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ "αž’αŸ’αž›αžΆαž€αŸ‹" αžœαžΆαž“αžΉαž„αž˜αž·αž“αž›αŸ’αž’αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαžœαžΆαž€αžΎαžαž‘αžΎαž„αž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαžΆ αž αžΎαž™αžαžΎαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš ETL αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž€αŸ‚αžœαžΆαž±αŸ’αž™αž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ "αž–αžΈαž€αžŽαŸ’αžαžΆαž›" αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ "αž’αŸ’αžœαžΎαž±αŸ’αž™αž‘αžΎαž„αžœαž·αž‰" αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αžšαž¬αž‘αŸ?..

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

៑.៣. ON COMMIT { Delete ROWS | αž‘αž˜αŸ’αž›αžΆαž€αŸ‹}

αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž₯αžšαž·αž™αžΆαž”αžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αŸ”

αž“αŸ…αž›αžΎ ON COMMIT DROP αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžšαžαžΆαž„αž›αžΎαžšαž½αž…αž αžΎαž™ αžœαžΆαž”αž„αŸ’αž€αžΎαž DROP TABLEαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™ ON COMMIT DELETE ROWS αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž€αžΆαž“αŸ‹αžαŸ‚αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ - αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž‘αžΈαž“αŸαŸ‡ TRUNCATE TABLE.

αžŠαŸ„αž™αžŸαžΆαžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž˜αŸαžαžΆαž“αŸƒαžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž‘αŸ…αž“αžΉαž„αžαžΆαžšαžΆαž„αž’αž˜αŸ’αž˜αžαžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ† αž“αž·αž„αž€αžΆαžšαž›αž»αž”αžαžΆαžšαžΆαž„αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“ "αž€αžΆαžšαž αžΎαž˜" αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž“αŸƒαžαžΆαžšαžΆαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ pg_class, pg_attribute, pg_attrdef, pg_depend,…

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

αž‡αžΆαž‘αžΌαž‘αŸ…αž€αž»αŸ†αž’αŸ’αžœαžΎαž”αŸ‚αž”αž“αŸαŸ‡! αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž„ CREATE TEMPORARY TABLE x ... ON COMMIT DELETE ROWS αž™αž€αžœαžΆαž…αŸαž‰αž–αžΈαžœαžŠαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš - αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ„αž™αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž˜αžΈαž“αžΈαž˜αž½αž™αŸ—αžαžΆαžšαžΆαž„αž˜αžΆαž“αžšαž½αž…αž αžΎαž™ αž“αžΉαž„αž˜αžΆαž“ (αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ CREATE) αž”αŸ‰αž»αž“αŸ’αžαŸ‚ αž“αžΉαž„αž‘αž‘αŸ, αž’αžšαž‚αž»αžŽβ€‹αž…αŸ†αž–αŸ„αŸ‡ TRUNCATE (αž™αžΎαž„αž€αŸαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž αŸ…αžšαž”αžŸαŸ‹αžœαžΆαž•αž„αžŠαŸ‚αžš) αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž…αž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž»αž“αŸ”

៑.ៀ. αžŠαžΌαž…αž‡αžΆ... αžšαž½αž˜αž‘αžΆαŸ†αž„...

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

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž—αžΆαž–αžαŸ’αž‡αž·αž›αž‚αžΊαž‡αžΆαž€αŸ’αž”αžΆαž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αŸƒαžœαžŒαŸ’αžαž“αž—αžΆαž–! αž“αŸ„αŸ‡β€‹αž αžΎαž™β€‹αž‡αžΆβ€‹αž˜αžΌαž›β€‹αž αŸαžαž»β€‹αžŠαŸ‚αž› αž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αžαŸ’αž˜αžΈ "αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αžšαžΌ" αžœαžΆαž’αžΆαž…αžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž„αž“αŸαŸ‡αŸ–

CREATE TEMPORARY TABLE import_table(
  LIKE target_table
);

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

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž“αŸƒαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ… αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžšαžŸαŸαžšαž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰ LIKE target_table INCLUDING INDEXES.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αž„αžŠαŸ‚αžšαŸ” DEFAULT-values ​​(αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž”αŸ†αž–αŸαž‰β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‚αž“αŸ’αž›αžΉαŸ‡β€‹αž…αž˜αŸ’αž”αž„) αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎ LIKE target_table INCLUDING DEFAULTS. αž¬αžŸαžΆαž˜αž‰αŸ’αž‰ - LIKE target_table INCLUDING ALL - αž…αž˜αŸ’αž›αž„αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž§αž”αžŸαž‚αŸ’αž‚...

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

αž‡αžΆαž‘αžΌαž‘αŸ… RTFM!

2. αžšαž”αŸ€αž”αžŸαžšαžŸαŸαžš?

αžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž“αž·αž™αžΆαž™αžαžΆ - αž”αŸ’αžšαžΎαžœαžΆαŸ” COPY- αž›αŸ†αž αžΌαžšαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ "αž€αž‰αŸ’αž…αž”αŸ‹" INSERT, αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž“αŸ…αž–αŸαž›αžαŸ’αž›αŸ‡. αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž˜αž»αž“αŸ”

3. αžαžΎαžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžŸαžΌαž˜β€‹αž±αŸ’αž™β€‹αž€αžΆαžšβ€‹αžŽαŸ‚αž“αžΆαŸ†β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž˜αžΎαž›β€‹αž‘αŸ…β€‹αžŠαžΌαž…β€‹αž“αŸαŸ‡β€‹:

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

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

៣.៑. αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž–αŸαž‰αž›αŸαž‰

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

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

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸαŸ‡? αž–αŸ’αžšαŸ„αŸ‡αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‘αŸ†αž αŸ†αžαžΆαžšαžΆαž„αž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž (αž“αŸ…αž…αžΆαŸ† MVCC αž‘αŸ!).

αž›αž»αž”αž…αŸαž‰αž–αžΈ dst

αž‘αŸ αž–αž·αžαžŽαžΆαžŸαŸ‹αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αžΈαžšαŸ–

  • αžŠαž€αž…αŸαž‰ (DELETE) αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„
  • αž”αž‰αŸ’αž…αžΌαž› αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈαžšαžΌαž”αž—αžΆαž–αžαŸ’αž˜αžΈαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αž“αŸ’αž‘αžΉαž˜αž“αžΉαž„αž“αŸ„αŸ‡ αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαžŠαž›αŸ‹ MVCC αž‘αŸ†αž αŸ†αž“αŸƒαžαžΆαžšαžΆαž„αž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„αž‘αŸ’αžœαŸαžŠαž„! αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αžšαžΌαž”αž—αžΆαž– +1M αž“αŸƒαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαž 10K αž‚αžΊαž αž½αžŸαž αŸαžαž»αž–αŸαž€...

αž€αžΆαžαŸ‹αž…αŸαž‰ dst

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž…αŸ’αžšαžΎαž“αžŠαžΉαž„αžαžΆαžαŸαž”αŸ’αž›αŸαžαž‘αžΆαŸ†αž„αž˜αžΌαž›αž’αžΆαž…αžŸαž˜αŸ’αž’αžΆαžαž”αžΆαž“αžŠαŸ„αž™αžαŸ„αž€αŸ–

  • αž…αŸ’αž”αžΆαžŸαŸ‹ (TRUNCATE) αžαžΆαžšαžΆαž„αž‘αžΆαŸ†αž„αž˜αžΌαž›
  • αž”αž‰αŸ’αž…αžΌαž› αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈαžšαžΌαž”αž—αžΆαž–αžαŸ’αž˜αžΈαŸ”

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

αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαŸ–

  • αž™αžΎαž„αž€αŸ†αž–αž»αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž™αŸˆαž–αŸαž›αžœαŸ‚αž„
  • TRUNCATE αž€αŸ†αžŽαžαŸ‹ αž…αžΌαž›αž”αŸ’αžšαžΎαž•αŸ’αžαžΆαž…αŸ‹αž˜αž»αž- αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹
  • αž™αžΎαž„αž’αŸ’αžœαžΎαžŸαž·αž›αžΆαž…αžΆαžšαžΉαž€αž‡αžΆαž™αžΌαžšαžŽαžΆαžŸαŸ‹αž˜αž€αž αžΎαž™ αž αžΎαž™αž’αŸ’αž“αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αž˜αž·αž“αž’αžΆαž…αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚ SELECT

αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž˜αž·αž“β€‹αž›αŸ’αž’...

αžαžΆαžšαžΆαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšβ€¦ αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡β€¦ / αž‘αž˜αŸ’αž›αžΆαž€αŸ‹αžαžΆαžšαžΆαž„β€¦

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

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

αž˜αžΆαž“αž”αŸ†αžŽαŸ‡ WIP αž–αžΈ Simon Riggs αžŠαŸ‚αž›αžŸαŸ’αž“αžΎαž±αŸ’αž™αž’αŸ’αžœαžΎ ALTER- αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ†αž“αž½αžŸαžαž½αžαžΆαžšαžΆαž„αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž―αž€αžŸαžΆαžšαžŠαŸ„αž™αž˜αž·αž“αž”αŸ‰αŸ‡αžŸαŸ’αžαž·αžαž· αž“αž·αž„ FK αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž€αžΌαžšαŸ‰αž»αž˜αž‘αŸαŸ”

αž›αž»αž” αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž”αž‰αŸ’αž…αžΌαž›

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

-- всС Π΄Π΅Π»Π°Π΅ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π²ΠΈΠ΄Π΅Π» "ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ…" состояний
BEGIN;

-- создаСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
CREATE TEMPORARY TABLE tmp(
  LIKE dst INCLUDING INDEXES -- ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΈ подобию, вмСстС с индСксами
) ON COMMIT DROP; -- Π·Π° Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ½Π° Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π°

-- быстро-быстро Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· COPY
COPY tmp FROM STDIN;
-- ...
-- .

-- удаляСм ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅
DELETE FROM
  dst D
USING
  dst X
LEFT JOIN
  tmp Y
    USING(pk1, pk2) -- поля ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°
WHERE
  (D.pk1, D.pk2) = (X.pk1, X.pk2) AND
  Y IS NOT DISTINCT FROM NULL; -- "Π°Π½Ρ‚ΠΈΠ΄ΠΆΠΎΠΉΠ½"

-- обновляСм ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ
UPDATE
  dst D
SET
  (f1, f2, f3) = (T.f1, T.f2, T.f3)
FROM
  tmp T
WHERE
  (D.pk1, D.pk2) = (T.pk1, T.pk2) AND
  (D.f1, D.f2, D.f3) IS DISTINCT FROM (T.f1, T.f2, T.f3); -- Π½Π΅Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅

-- вставляСм ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅
INSERT INTO
  dst
SELECT
  T.*
FROM
  tmp T
LEFT JOIN
  dst D
    USING(pk1, pk2)
WHERE
  D IS NOT DISTINCT FROM NULL;

COMMIT;

៣.្. αž“αžΆαŸ†αž…αžΌαž›αž€αŸ’αžšαŸ„αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

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

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

-- Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
CREATE TABLE kladr(...);
CREATE TABLE kladr_house(...);

-- Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с историСй ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
CREATE TABLE kladr$log(
  ro kladr, -- Ρ‚ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ Ρ†Π΅Π»Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ записСй старой/Π½ΠΎΠ²ΠΎΠΉ
  rn kladr
);

CREATE TABLE kladr_house$log(
  ro kladr_house,
  rn kladr_house
);

-- общая функция логирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
CREATE OR REPLACE FUNCTION diff$log() RETURNS trigger AS $$
DECLARE
  dst varchar = TG_TABLE_NAME || '$log';
  stmt text = '';
BEGIN
  -- провСряСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ логгирования ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ записи
  IF TG_OP = 'UPDATE' THEN
    IF NEW IS NOT DISTINCT FROM OLD THEN
      RETURN NEW;
    END IF;
  END IF;
  -- создаСм запись лога
  stmt = 'INSERT INTO ' || dst::text || '(ro,rn)VALUES(';
  CASE TG_OP
    WHEN 'INSERT' THEN
      EXECUTE stmt || 'NULL,$1)' USING NEW;
    WHEN 'UPDATE' THEN
      EXECUTE stmt || '$1,$2)' USING OLD, NEW;
    WHEN 'DELETE' THEN
      EXECUTE stmt || '$1,NULL)' USING OLD;
  END CASE;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž‚αž“αŸ’αž›αžΉαŸ‡αž˜αž»αž“αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ (αž¬αž”αžΎαž€αž–αž½αž€αžœαžΆαžαžΆαž˜αžšαž™αŸˆ ALTER TABLE ... ENABLE TRIGGER ...):

CREATE TRIGGER log
  AFTER INSERT OR UPDATE OR DELETE
  ON kladr
    FOR EACH ROW
      EXECUTE PROCEDURE diff$log();

CREATE TRIGGER log
  AFTER INSERT OR UPDATE OR DELETE
  ON kladr_house
    FOR EACH ROW
      EXECUTE PROCEDURE diff$log();

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

៣.៣. αž€αŸ†αž–αž»αž„β€‹αž“αžΆαŸ†αž…αžΌαž›β€‹αžŸαŸ†αžŽαž»αŸ†β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž—αŸ’αž‡αžΆαž”αŸ‹

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

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

CREATE TABLE client(
  client_id
    serial
      PRIMARY KEY
, inn
    varchar
      UNIQUE
, name
    varchar
);

CREATE TABLE invoice(
  invoice_id
    serial
      PRIMARY KEY
, client_id
    integer
      REFERENCES client(client_id)
, number
    varchar
, dt
    date
, sum
    numeric(32,2)
);

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž–αžΈαž”αŸ’αžšαž—αž–αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž€αžšαž€αž™αžΎαž„αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆ β€œall in oneβ€αŸ–

CREATE TEMPORARY TABLE invoice_import(
  client_inn
    varchar
, client_name
    varchar
, invoice_number
    varchar
, invoice_dt
    date
, invoice_sum
    numeric(32,2)
);

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

0123456789;Вася;A-01;2020-03-16;1000.00
9876543210;ΠŸΠ΅Ρ‚Ρ;A-02;2020-03-16;666.00
0123456789;Вася;B-03;2020-03-16;9999.00

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ†αžšαžΌ αž™αžΎαž„αž“αžΉαž„αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαž€αž›αŸ’αž”αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αžšαžΌαžœαž…αžΆαŸ†αžαžΆ - COPY αž€αžΆαž“αŸ‹αžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–!

INSERT INTO invoice_import
VALUES
  ('0123456789', 'Вася', 'A-01', '2020-03-16', 1000.00)
, ('9876543210', 'ΠŸΠ΅Ρ‚Ρ', 'A-02', '2020-03-16', 666.00)
, ('0123456789', 'Вася', 'B-03', '2020-03-16', 9999.00);

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

CREATE TEMPORARY TABLE client_import AS
SELECT DISTINCT ON(client_inn)
-- ΠΌΠΎΠΆΠ½ΠΎ просто SELECT DISTINCT, Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹
  client_inn inn
, client_name "name"
FROM
  invoice_import;

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

ALTER TABLE invoice_import ADD COLUMN client_id integer;
ALTER TABLE client_import ADD COLUMN client_id integer;

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

-- проставляСм Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ID ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… записСй
UPDATE
  client_import T
SET
  client_id = D.client_id
FROM
  client D
WHERE
  T.inn = D.inn; -- unique key

-- вставляСм ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ записи ΠΈ проставляСм ΠΈΡ… ID
WITH ins AS (
  INSERT INTO client(
    inn
  , name
  )
  SELECT
    inn
  , name
  FROM
    client_import
  WHERE
    client_id IS NULL -- Ссли ID Π½Π΅ проставился
  RETURNING *
)
UPDATE
  client_import T
SET
  client_id = D.client_id
FROM
  ins D
WHERE
  T.inn = D.inn; -- unique key

-- проставляСм ID ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρƒ записСй счСтов
UPDATE
  invoice_import T
SET
  client_id = D.client_id
FROM
  client_import D
WHERE
  T.client_inn = D.inn; -- ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠ»ΡŽΡ‡

αžαžΆαž˜αž–αž·αžαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„ invoice_import αž₯αž‘αžΌαžœβ€‹αž™αžΎαž„β€‹αž”αžΆαž“β€‹αž”αŸ†αž–αŸαž‰β€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„ client_idαžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αž‰αŸ’αž…αžΌαž›αžœαž·αž€αŸ’αž€αž™αž”αžαŸ’αžšαŸ”

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

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