āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĻ¸: "āĻŽā§ƒāĻ¤āĻĻā§‡āĻ°" āĻ¸ā§ˆāĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻĄāĻŧāĻžāĻ‡ āĻ•āĻ°āĻž

PostgreSQL āĻāĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽā§‡āĻ° āĻŦāĻŋāĻļā§‡āĻˇāĻ¤ā§āĻŦ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻšāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ "āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻ¨āĻ¯āĻŧ"āĨ¤ āĻ†āĻœ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāĻ¸ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§€ āĻ•āĻ°ā§‡ āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻŦ - āĻ†āĻĒāĻĄā§‡āĻŸ āĻŦāĻ¨āĻžāĻŽ MVCC āĻ¨ā§€āĻ¤āĻŋ.

āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ—āĻ˛ā§āĻĒ āĻŽāĻšāĻžāĻ¨ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§:

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻāĻ•āĻŸāĻŋ UPDATE āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻĻā§āĻŸāĻŋ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ: DELETE āĻāĻŦāĻ‚ INSERTā§ˇ āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ xmax āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ¨ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧ вĐĩŅ€ŅĐ¸Ņ вĐĩŅ€ŅĐ¸Ņ āĻāĻ•āĻ‡ āĻ˛āĻžāĻ‡āĻ¨; āĻāĻ° xmin āĻŽāĻžāĻ¨ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° xmax āĻŽāĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤

āĻāĻ‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻļā§‡āĻˇ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻ°ā§‡, āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻŦāĻž āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ COMMIT/ROOLBACK, āĻ¸ā§āĻŦā§€āĻ•ā§ƒāĻ¤ āĻšāĻŦā§‡ "āĻŽā§ƒāĻ¤" (āĻŽā§ƒāĻ¤ āĻŸāĻŋāĻĒāĻ˛) āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ VACUUM āĻŸā§‡āĻŦāĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ¸āĻžāĻĢ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€.

āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĻ¸: "āĻŽā§ƒāĻ¤āĻĻā§‡āĻ°" āĻ¸ā§ˆāĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻĄāĻŧāĻžāĻ‡ āĻ•āĻ°āĻž

āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ‡ āĻ˜āĻŸāĻŦā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ "āĻŽā§ƒāĻ¤" āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻ…āĻ°ā§āĻœāĻŋāĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ - āĻŦāĻžāĻ°āĻŦāĻžāĻ° āĻŦāĻž āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ­āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻāĻ•āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡, āĻāĻŦāĻ‚ āĻāĻ•āĻŸā§ āĻĒāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻ‡ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻŽā§āĻ–ā§‹āĻŽā§āĻ–āĻŋ āĻšāĻŦā§‡āĻ¨ āĻ­ā§āĻ¯āĻžāĻ•ā§āĻ¯āĻŧāĻžāĻŽ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡ āĻ¨āĻž.

#1: āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻ¸āĻ°āĻžāĻ¤ā§‡ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°āĻŋ

āĻ§āĻ°āĻž āĻ¯āĻžāĻ• āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›ā§‡, āĻāĻŦāĻ‚ āĻšāĻ āĻžā§Ž āĻāĻŸāĻŋ āĻŦā§āĻāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻ°ā§‡āĻ•āĻ°ā§āĻĄā§‡ āĻāĻ•ā§āĻ¸ āĻĢāĻŋāĻ˛ā§āĻĄ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨:

UPDATE tbl SET X = <newX> WHERE pk = $1;

āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡, āĻ•āĻžāĻ°ā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻšā§āĻ›ā§‡ āĻ¯ā§‡ Y āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻŸāĻŋāĻ“ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤:

UPDATE tbl SET Y = <newY> WHERE pk = $1;

... āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°āĻ“ Z - āĻ•ā§‡āĻ¨ āĻ¤ā§āĻšā§āĻ› āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻˇā§āĻŸ āĻ•āĻ°āĻŦā§‡āĻ¨?

UPDATE tbl SET Z = <newZ> WHERE pk = $1;

āĻāĻ‡ āĻ°ā§‡āĻ•āĻ°ā§āĻĄā§‡āĻ° āĻ•āĻ¯āĻŧāĻŸāĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻ†āĻ›ā§‡? āĻšā§āĻ¯āĻžāĻ, 4 āĻŸā§āĻ•āĻ°āĻž! āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ•, āĻāĻŦāĻ‚ 3āĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒāĻ°ā§‡ [āĻ…āĻŸā§‹]āĻ­ā§āĻ¯āĻžāĻ•ā§āĻ¯āĻŧāĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ā§ˇ

āĻāĻ­āĻžāĻŦā§‡ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž! āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨ āĻāĻ• āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ - āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

UPDATE tbl SET X = <newX>, Y = <newY>, Z = <newZ> WHERE pk = $1;

#2: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ†āĻ˛āĻžāĻĻāĻž, āĻ˛ā§āĻ•!

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ–āĻ¨āĻ“ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ…āĻ¨ā§‡āĻ•, āĻ…āĻ¨ā§‡āĻ• āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°ā§āĻ¨ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻŦāĻž āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻ•āĻžāĻ°ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ)āĨ¤ āĻāĻŦāĻ‚ āĻāĻ‡āĻ°āĻ•āĻŽ āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻ‰āĻĄāĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ:

UPDATE tbl SET X = <newX> WHERE pk BETWEEN $1 AND $2;

āĻ†āĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ• āĻāĻ‡ āĻĢāĻ°ā§āĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ˜āĻŸā§‡ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻ–āĻžāĻ˛āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻĄā§‡āĻŸāĻžāĻ¤ā§‡ āĻ•āĻŋāĻ›ā§ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ¤āĻŋāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĄā§‡āĻŸāĻžāĻ° āĻ¸āĻ āĻŋāĻ•āĻ¤āĻž āĻŽā§‹āĻŸā§‡āĻ‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻžāĻ¯āĻŧ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻ¨āĻž - āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¨āĻŋāĻ°āĻ°ā§āĻĨāĻ•! āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ°ā§‡āĻ•āĻ°ā§āĻĄāĻŸāĻŋ āĻĒā§āĻ¨āĻ°ā§āĻ˛āĻŋāĻ–āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋāĻ“ āĻ¤āĻžāĻ¤ā§‡ āĻ āĻŋāĻ• āĻ¯āĻž āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ - āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‡āĻ¨? āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

UPDATE tbl SET X = <newX> WHERE pk BETWEEN $1 AND $2 AND X IS DISTINCT FROM <newX>;

āĻ…āĻ¨ā§‡āĻ• āĻŽāĻžāĻ¨ā§āĻˇ āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧāĻ•āĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°ā§‡āĻ° āĻ…āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¸āĻšā§‡āĻ¤āĻ¨ āĻ¨āĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻžāĻ°āĻŖāĻžāĻ° āĻļā§€āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ IS DISTINCT FROM āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡:
āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĻ¸: "āĻŽā§ƒāĻ¤āĻĻā§‡āĻ°" āĻ¸ā§ˆāĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻĄāĻŧāĻžāĻ‡ āĻ•āĻ°āĻž
... āĻāĻŦāĻ‚ āĻœāĻŸāĻŋāĻ˛ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸā§ ROW()- āĻ…āĻ­āĻŋāĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ:
āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĻ¸: "āĻŽā§ƒāĻ¤āĻĻā§‡āĻ°" āĻ¸ā§ˆāĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻĄāĻŧāĻžāĻ‡ āĻ•āĻ°āĻž

#3: āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻŋāĻ¯āĻŧāĻ¤āĻŽāĻžāĻ•ā§‡... āĻŦā§āĻ˛āĻ• āĻ•āĻ°ā§‡ āĻšāĻŋāĻ¨āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋ

āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻĻā§āĻŸāĻŋ āĻ…āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•āĻŸāĻŋ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻāĻŸāĻŋ "āĻĒā§āĻ°āĻ—āĻ¤āĻŋāĻ¤ā§‡ āĻ†āĻ›ā§‡":

UPDATE tbl SET processing = TRUE WHERE pk = $1;

āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋ āĻ†āĻ¸āĻ˛ā§‡ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻ‡ āĻ†āĻ‡āĻĄāĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻĒā§āĻ°āĻĨāĻŽ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻāĻ‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡ "āĻ˛āĻ•" āĻĨāĻžāĻ•āĻŦā§‡āĨ¤

āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ # 1: āĻŸāĻžāĻ¸ā§āĻ•āĻŸāĻŋ āĻ†āĻ—ā§‡āĻ°āĻŸāĻŋāĻ¤ā§‡ āĻ•āĻŽā§‡ āĻ—ā§‡āĻ›ā§‡

āĻāĻ° āĻļā§āĻ§ā§ āĻāĻŸāĻž āĻ†āĻŦāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ• IS DISTINCT FROM:

UPDATE tbl SET processing = TRUE WHERE pk = $1 AND processing IS DISTINCT FROM TRUE;

āĻāĻ‡ āĻĢāĻ°ā§āĻŽāĻŸāĻŋāĻ¤ā§‡, āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ¯ā§‡āĻŽāĻ¨ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤ - āĻ¤āĻžāĻ‡ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡ āĻ°ā§‡āĻ•āĻ°ā§āĻĄāĻŸāĻŋ "āĻ–ā§āĻāĻœā§‡ āĻ¨āĻž āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ°" āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻŋāĨ¤

āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ # 2: āĻ‰āĻĒāĻĻā§‡āĻˇā§āĻŸāĻž āĻ˛āĻ•

āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻŦāĻŋāĻˇāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ†āĻŦā§‡āĻĻāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļāĻŽā§‚āĻ˛āĻ• āĻŦā§āĻ˛āĻ•āĻŋāĻ‚ āĻāĻ° "āĻ°ā§‡āĻ•".

āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ # 3: āĻŦā§‹āĻ•āĻž āĻ•āĻ˛

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ‡ āĻ āĻŋāĻ• āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻŋ āĻ˜āĻŸāĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻ•āĻ‡ āĻ°ā§‡āĻ•āĻ°ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻ•āĻžāĻœ? āĻ…āĻĨāĻŦāĻž āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ‡āĻĄā§‡ āĻŦāĻŋāĻœāĻ¨ā§‡āĻ¸ āĻ˛āĻœāĻŋāĻ• āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ—ā§‹āĻ˛āĻŽāĻžāĻ˛ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ? āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻšāĻŋāĻ¨ā§āĻ¤āĻž āĻ•āĻ°ā§‡āĻ¨? ..

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨