เดคเดพเดฎเดธเดฟเดฏเดพเดคเต เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเดฟเดจเตเดจเตเดเต, เดชเดเตเดเดฟเด เดฐเตเดเดเดณเดฟเตฝ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดตเตปเดคเตเดคเดฟเตฝ เดถเดฐเดฟเดฏเดพเดเตเดเตเดฃเตเดเดคเดฟเดจเตเดฑเต เดเดตเดถเตเดฏเดเดค เดชเดฒเดฐเตเด เด
เดญเดฟเดฎเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดจเดฟเดเตเดเต เดเดคเดฟเดจเดเด เดเดฃเตเดเต
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเดเตเดเตพ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดถเดฐเดฟเดฏเดพเดเตเดเตเดฃเตเด เดเดฐเต เดฎเตเดถเดฏเดฟเตฝ, เดเดฐเต เดฆเตเดทเดฟเดเตเด เดเตเดฐเดฟเดเตผ เดคเตเดเตเดเดฟเดเตเดเดฟเดเดเตเดเตเดจเตเดจเต 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
, เดเดเตเดเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเต เดจเดฟเดฒเดตเดฟเดฒเต เดธเตเดทเตป เดฎเตเดกเต - "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