Ise taimi mulimuli ane, e tele tagata o loʻo feagai ma le manaʻoga e faʻasaʻo tele se mea i faʻamaumauga o laulau. ua uma ona ou , ma faʻafefea - e sili atu le aua le faia. O le asō o le a ou talanoa e uiga i le vaega lona lua o le faʻafouina tele - e uiga i fa'aoso.
Mo se faʻataʻitaʻiga, i luga o se laulau e te manaʻomia e faʻasaʻo ai se mea, o loʻo i ai se mea leaga ON UPDATE, fa'aliliu uma suiga i nisi fa'apotopotoga. Ma e tatau ona e faʻafouina mea uma (amataina se fanua fou, mo se faʻataʻitaʻiga) ma le faʻaeteete ina ia le aʻafia nei iunite.
Sei o tatou tape na o mea fa'aoso!
BEGIN;
ALTER TABLE ... DISABLE TRIGGER ...;
UPDATE ...; -- тут долго-долго
ALTER TABLE ... ENABLE TRIGGER ...;
COMMIT;O le mea moni, pau lava lena- ua uma ona tautau mea uma.
Talu ai ALTER TABLE fa'atupu AccessExclusive-o se loka i lalo e leai se tasi e tamoe tutusa, e oo lava i se tasi faigofie SELECT, o le a le mafai ona faitau se mea mai le laulau. O lona uiga, seʻia maeʻa lenei fefaʻatauaiga, o tagata uma e manaʻo e "naʻo le faitau" o le a faʻatali. Ma tatou te manatua lena mea UPDATE ua leva ona tatou...
Tatou tape vave, ona ki loa lea!
BEGIN;
ALTER TABLE ... DISABLE TRIGGER ...;
COMMIT;
UPDATE ...;
BEGIN;
ALTER TABLE ... ENABLE TRIGGER ...;
COMMIT;O lea ua sili atu le tulaga, o le taimi faʻatali e matua itiiti lava. Ae na o le lua faafitauli e faaleagaina uma ai le matagofie:
ALTER TABLEo ia lava e faʻatali mo isi gaioiga uma i luga o le laulau, e aofia ai ma umiSELECT- A'o pe le fa'aoso, so'o se suiga o le a "felelei atu" i le laulau, e oo lava ia i tatou. Ma o le a le oʻo i totonu o iunite, e ui lava e tatau. Fa'alavelave!
Puleaina o Feauaiga o le Sauniga
O lea la, i le lomiga talu ai na matou maua ai se mea taua - e tatau ona tatou aʻoaʻoina le faʻaoso e iloagofie ai "a tatou" suiga i le laulau mai le "e le o tatou". “O matou” ua misia e pei ona i ai, ae “e le o tatou” e faaosoina. Mo lenei mea e mafai ona e faʻaaogaina .
session_replication_role
Faitauga :
E a'afia fo'i le masini fa'aoso i le fetuutuuna'iga o fa'atulagaga . A fa'agaoioia e aunoa ma nisi fa'atonuga (fa'aletonu), o le a mu fa'aoso pe a fai o le fa'asologa o le matafaioi o le "a'a'aga" (fa'aletonu) po'o le "lotoifale". Fa'aosoina fa'atonuga
ENABLE REPLICA, e na'o le aoga pe a faiga o sauniga o iai nei - "fa'atusa", ma fa'aoso e mafai ona fa'amaotiENABLE ALWAYS, o le a fa'aosoina e tusa lava po'o le a le faiga o lo'o iai nei.
Ou te fia faamamafa faapitoa atu o le faatulagaga e le faatatau i tagata uma i le taimi e tasi, e pei o ALTER TABLE, ae na'o la tatou sootaga fa'apitoa. I le aofaʻi, ina ia leai se faʻaosoina talosaga e faʻaosoina:
SET session_replication_role = replica; -- выключили триггеры
UPDATE ...;
SET session_replication_role = DEFAULT; -- вернули в исходное состояниеTulaga i totonu o se fa'aoso
Ae o le filifiliga o loʻo i luga e aoga mo faʻalavelave uma i le taimi e tasi (pe e te manaʻomia le "suia" i luma o faʻaoso e te le manaʻo e faʻamalo). Ma afai tatou te manaomia "tapē" se tasi fa'aoso fa'apitoa?
O le a fesoasoani lea ia i tatou :
O igoa fa'aopoopo fa'aopoopo o lo'o tusia fa'apea: igoa fa'aopoopo, togi, ona fa'aigoa ai lea o le igoa fa'amau, e tutusa ma igoa fa'apitoa i SQL. Mo se fa'ata'ita'iga: plpgsql.variable_conflict.
Talu ai o filifiliga e le o ni faiga e mafai ona seti i faiga e le faʻapipiʻiina ai le faʻaopoopoga faʻaopoopoga tutusa, e talia e PostgreSQL tau mo soʻo se igoa e lua vaega.
Muamua tatou te suia le faʻaoso, pei o lenei:
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;
... I le ala, e mafai ona faia lenei mea "ola", e aunoa ma le poloka, ala CREATE OR REPLACE mo le galuega fa'aoso. Ona sosoo ai lea ma le fesoʻotaʻiga faʻapitoa matou te setiina "la matou" fesuiaiga:
SET mycfg.my_table_convert_process = 'TRUE';
UPDATE ...;
SET mycfg.my_table_convert_process = ''; -- вернули в исходное состояние
E te iloa isi auala? Fa'asoa i fa'amatalaga.
puna: www.habr.com
