PostgreSQL āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨āĻ¸: āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸ āĻ•āĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§āĻ¨

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

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻĻ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻā§āĻ˛ā§‡ āĻ†āĻ›ā§‡ ON UPDATE, āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻˇā§āĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻļā§āĻ°ā§ āĻ•āĻ°ā§āĻ¨) āĻ¯āĻžāĻ¤ā§‡ āĻāĻ‡ āĻ¸āĻŽāĻˇā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤

āĻāĻ° āĻļā§āĻ§ā§ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ¨āĻŋāĻˇā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•!

BEGIN;
  ALTER TABLE ... DISABLE TRIGGER ...;
  UPDATE ...; -- Ņ‚ŅƒŅ‚ Đ´ĐžĐģĐŗĐž-Đ´ĐžĐģĐŗĐž
  ALTER TABLE ... ENABLE TRIGGER ...;
COMMIT;

āĻ†āĻ¸āĻ˛ā§‡, āĻāĻ‡ āĻ¸āĻŦ - āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻā§āĻ˛ā§‡ āĻ†āĻ›ā§‡.

āĻ•āĻžāĻ°āĻŖ ALTER TABLE āĻ†āĻ°ā§‹āĻĒ āĻ•āĻ°ā§‡ āĻāĻ•ā§āĻ¸āĻ•ā§āĻ˛ā§āĻ¸āĻŋāĻ­ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸- āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻž āĻ¯āĻžāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻ•ā§‡āĻ‰ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻšāĻ˛āĻ›ā§‡ āĻ¨āĻž, āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ SELECT, āĻŸā§‡āĻŦāĻŋāĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡ āĻ¨āĻž. āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāĻ‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻļā§‡āĻˇ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻ¯āĻžāĻ°āĻž "āĻļā§āĻ§ā§ āĻĒāĻĄāĻŧāĻ¤ā§‡" āĻšāĻžāĻ¯āĻŧ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŦāĻžāĻ‡ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ UPDATE āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĻā§€āĻ°ā§āĻ˜ ...

āĻāĻ° āĻĻā§āĻ°ā§āĻ¤ āĻāĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĻā§āĻ°ā§āĻ¤ āĻāĻŸāĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§āĻ¨!

BEGIN;
  ALTER TABLE ... DISABLE TRIGGER ...;
COMMIT;

UPDATE ...;

BEGIN;
  ALTER TABLE ... ENABLE TRIGGER ...;
COMMIT;

āĻāĻ–āĻžāĻ¨ā§‡ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ­āĻžāĻ˛, āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŽāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§ŒāĻ¨ā§āĻĻāĻ°ā§āĻ¯ āĻ¨āĻˇā§āĻŸ āĻ•āĻ°ā§‡:

  • ALTER TABLE āĻ¨āĻŋāĻœā§‡ āĻ¨āĻŋāĻœā§‡ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻĨāĻžāĻ•āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ˛āĻŽā§āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ“ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ SELECT
  • āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻŦāĻ¨ā§āĻ§ āĻĨāĻžāĻ•āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸āĻŽāĻˇā§āĻŸāĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž, āĻ¯āĻĻāĻŋāĻ“ āĻāĻŸāĻŋ āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻāĻžāĻŽā§‡āĻ˛āĻž!

āĻ¸ā§‡āĻļāĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž

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

āĻ…āĻ§āĻŋāĻŦā§‡āĻļāĻ¨_āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ_āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

āĻĒāĻĄāĻŧā§āĻ¨ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛:

āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻžāĻ“ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ…āĻ§āĻŋāĻŦā§‡āĻļāĻ¨_āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ_āĻ­ā§‚āĻŽāĻŋāĻ•āĻž. āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ (āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ) āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻ–āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž "āĻ…āĻ°āĻŋāĻœāĻŋāĻ¨" (āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ) āĻŦāĻž "āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ" āĻšāĻ¯āĻŧ āĻ¤āĻ–āĻ¨ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻšāĻŦā§‡ā§ˇ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ ENABLE REPLICA, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻĻāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸ā§‡āĻļāĻ¨ āĻŽā§‹āĻĄ - "āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ", āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ ENABLE ALWAYS, āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻŽā§‹āĻĄ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻļā§‡āĻˇā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ†āĻŽāĻŋ āĻŦāĻŋāĻļā§‡āĻˇāĻ­āĻžāĻŦā§‡ āĻœā§‹āĻ° āĻĻāĻŋāĻŦ āĻ¯ā§‡ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻŸāĻŋ āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻ¸āĻ•āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯ā§‹āĻœā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻ¯ā§‡āĻŽāĻ¨ ALTER TABLE, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§ƒāĻĨāĻ• āĻŦāĻŋāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡āĨ¤ āĻŽā§‹āĻŸ, āĻ¯āĻžāĻ¤ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•āĻžāĻœ āĻ¨āĻž āĻ•āĻ°ā§‡:

SET session_replication_role = replica; -- вŅ‹ĐēĐģŅŽŅ‡Đ¸Đģи Ņ‚Ņ€Đ¸ĐŗĐŗĐĩŅ€Ņ‹
UPDATE ...;
SET session_replication_role = DEFAULT; -- вĐĩŅ€ĐŊŅƒĐģи в иŅŅ…ОдĐŊĐžĐĩ ŅĐžŅŅ‚ĐžŅĐŊиĐĩ

āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻž

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ (āĻ…āĻĨāĻŦāĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ "āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ" āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ†āĻ—ā§‡ āĻĨā§‡āĻ•ā§‡āĻ‡ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻˇā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¨āĻž)āĨ¤ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° "āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§āĻ¨"?

āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŦā§‡ "āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€" āĻ¸ā§‡āĻļāĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛:

āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻ¨āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧ: āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ā§‡āĻ° āĻ¨āĻžāĻŽāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄāĻŸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻ¨āĻžāĻŽāĻŸāĻŋ, SQL-āĻāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻ¨āĻžāĻŽā§‡āĻ° āĻŽāĻ¤ā§‹āĨ¤ āĻ¯ā§‡āĻŽāĻ¨: plpgsql.variable_conflictāĨ¤
āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŦāĻžāĻ‡āĻ°ā§‡āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋ āĻāĻŽāĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻž āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§‡ āĻ¨āĻž, PostgreSQL āĻ¸ā§āĻŦā§€āĻ•āĻžāĻ° āĻ•āĻ°ā§‡ āĻĻā§āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻš āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¨āĻžāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨.

āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ†āĻŽāĻ°āĻž āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ•āĻ°āĻŋ, āĻāĻ°āĻ•āĻŽ āĻ•āĻŋāĻ›ā§:

BEGIN
    -- ĐŋŅ€ĐžŅ†ĐĩŅŅŅƒ ĐēĐžĐŊвĐĩŅ€Ņ‚Đ°Ņ†Đ¸Đ¸ ĐŧĐžĐļĐŊĐž Đ´ĐĩĐģĐ°Ņ‚ŅŒ вŅĐĩ
    IF current_setting('mycfg.my_table_convert_process') = 'TRUE' THEN
        IF TG_OP IN ('INSERT', 'UPDATE') THEN
            RETURN NEW;
        ELSE
            RETURN OLD;
        END IF;
    END IF;
...

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻāĻŸāĻŋ "āĻ˛āĻžāĻ­ā§‡āĻ° āĻœāĻ¨ā§āĻ¯", āĻŦā§āĻ˛āĻ• āĻ¨āĻž āĻ•āĻ°ā§‡, āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ CREATE OR REPLACE āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻŦāĻŋāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡ āĻ†āĻŽāĻ°āĻž "āĻ†āĻŽāĻžāĻĻā§‡āĻ°" āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛āĻ•ā§‡ āĻŽā§‹āĻ°āĻ— āĻ•āĻ°āĻŋ:


SET mycfg.my_table_convert_process = 'TRUE';
UPDATE ...;
SET mycfg.my_table_convert_process = ''; -- вĐĩŅ€ĐŊŅƒĐģи в иŅŅ…ОдĐŊĐžĐĩ ŅĐžŅŅ‚ĐžŅĐŊиĐĩ

āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋ āĻ…āĻ¨ā§āĻ¯ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻœāĻžāĻ¨ā§‡āĻ¨? āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ•āĻ°ā§āĻ¨.

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

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