เชตเชนเซเชฒเชพ เช
เชฅเชตเชพ เชชเชเซเชจเชพ เชธเชฎเชฏเชฎเชพเช, เชเชฃเชพ เชฒเซเชเซเชจเซ เชเซเชฌเชฒ เชฐเซเชเซเชฐเซเชกเซเชธเชฎเชพเช เชฎเซเชเชพ เชชเชพเชฏเซ เชเชเชเช เชธเซเชงเชพเชฐเชตเชพเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซ เชเซ. เชฎเชพเชฐเซ เชชเชพเชธเซ เชชเชนเซเชฒเซเชฅเซ เช เชเซ
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเช เชเซเชฌเชฒ เชชเชฐ เชเซ เชเซเชฎเชพเช เชคเชฎเชพเชฐเซ เชเชเชเช เชธเซเชงเชพเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชคเซเชฏเชพเช เชเช เชฆเซเชทเซเช เชเซเชฐเชฟเชเชฐ เชเซ 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