PostgreSQL Antipatterns: แƒจแƒ”แƒชแƒ•แƒแƒšแƒ”แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ•แƒšแƒ˜แƒ—

แƒแƒ“แƒ แƒ” แƒ—แƒฃ แƒ’แƒ•แƒ˜แƒแƒœ, แƒ‘แƒ”แƒ•แƒ  แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒก แƒแƒฌแƒงแƒ“แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒจแƒ˜ แƒ แƒแƒฆแƒแƒชแƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ. แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ›แƒ˜แƒ—แƒฎแƒ แƒ, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ แƒ”แƒก แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒแƒ“แƒ“แƒ แƒ แƒแƒ’แƒแƒ  - แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก. แƒ“แƒฆแƒ”แƒก แƒ›แƒ” แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘ แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒแƒกแƒžแƒ”แƒฅแƒขแƒ–แƒ” - แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ แƒแƒฆแƒแƒชแƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—, แƒแƒ แƒ˜แƒก แƒ‘แƒแƒ แƒแƒขแƒ˜ แƒ’แƒแƒ›แƒแƒ›แƒฌแƒ•แƒ”แƒ•แƒ˜ ON UPDATE, แƒงแƒ•แƒ”แƒšแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒแƒ’แƒ แƒ”แƒ’แƒแƒขแƒ–แƒ”. แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒšแƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ) แƒ˜แƒกแƒ” แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒแƒ“, แƒ แƒแƒ› แƒ”แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒ“แƒแƒ–แƒแƒ แƒแƒšแƒ“แƒ”แƒก.

แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ— แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ”แƒ‘แƒ˜!

BEGIN;
  ALTER TABLE ... DISABLE TRIGGER ...;
  UPDATE ...; -- ั‚ัƒั‚ ะดะพะปะณะพ-ะดะพะปะณะพ
  ALTER TABLE ... ENABLE TRIGGER ...;
COMMIT;

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒกแƒฃแƒš แƒ”แƒก แƒแƒ แƒ˜แƒก - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒฉแƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› ALTER TABLE แƒแƒฌแƒ”แƒกแƒ”แƒ‘แƒก AccessExclusive-แƒกแƒแƒ™แƒ”แƒขแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒจแƒแƒช แƒแƒ แƒแƒ•แƒ˜แƒœ แƒ“แƒแƒ“แƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“, แƒ—แƒฃแƒœแƒ“แƒแƒช แƒฃแƒ‘แƒ แƒแƒšแƒ 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ