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