我需要修改已經定義的觸發器(它使用特定的功能)並且正在使用中。如果我使用CREATE或REPLACE FUNCTION修改它,Postgres的行爲是什麼?它會在更新函數時「暫停」舊觸發器嗎?據我所知,Postgres應該在一個事務中執行所有REPLACE FUNCTION(所以表被鎖定,所以觸發器在更新時被修改,然後下一個被鎖定的事務將使用新的FUNCTION而不是舊事務。 ?在Postgresql中修改觸發器
1
A
回答
1
是根據文檔:。
http://www.postgresql.org/docs/9.0/static/explicit-locking.html
此外,大多數的PostgreSQL命令自動獲取的適當模式的鎖,以確保引用的表中沒有不兼容的方式刪除或修改,而命令執行(例如, ALTER TABLE無法安全地與同一個表上的其他操作同時執行,因此它會在表上獲得排它鎖來強制執行該操作。)
1
它會在更新函數時「暫停」舊觸發器嗎?
應該繼續執行舊的觸發功能,當呼叫過程中(取決於隔離級別,在同一事務後續的調用會使用舊的定義太,我不是100%肯定的默認級別會但是,這樣做)會阻止嘗試在更新時調用該函數的新事務,並在更換後執行新函數。
據我所知,Postgres的應該執行在一個事務中的所有替換功能(這樣的表被鎖定,所以當它被更新,那麼下一個交易鎖定將使用新的功能不是觸發器被修改舊的。對不對?
最好的我知道,當它的更新相關的觸發功能不鎖定表。
請藉此與一粒鹽,但:上面的兩個陳述相當於我直觀地體驗到的ct mvcc要做的,而不是知道Postgres的源代碼這個領域。 (一些核心貢獻者定期來到SO,並可能最終以更加精確的答案響起。)
請注意,這是比較直接的測試,也就是說:打開兩個psql會話,打開兩個事務,然後看看發生了什麼......
相關問題
- 1. 使用時間觸發器修改postgresql數據庫中的值?
- 2. 會話修改觸發器?
- 3. Postgresql觸發器
- 4. 如何修改SSDT中的觸發器
- 5. postgresql中的觸發器
- 6. 在postgreSQL中創建觸發器
- 7. 如何在PostgreSql中創建觸發器?
- 8. postgresql-使用觸發器觸發
- 9. 在Rails應用中更改PostgreSQL表格禁用觸發器
- 10. WPF熱鍵無需修改器觸發
- 11. SQL Server觸發器 - 修改id列
- 12. 修改現有觸發器的步驟
- 13. SQL - 修改或刪除觸發器
- 14. 修改多個oracle觸發器
- 15. postgresql在用戶組更改時觸發?
- 16. PostgreSQL觸發器和例外
- 17. Postgresql:創建觸發器
- 18. 調試postgresql觸發器
- 19. Postgresql觸發器示例
- 20. postgresql程序/觸發器
- 21. postgresql插入觸發器
- 22. CURRENT_DATE PostgreSQL中觸發
- 23. 如何在mysql觸發器中添加修改後的信息?
- 24. 在SQL更新觸發器中捕獲修改的行
- 25. 在Mysql中修改表從它自己的觸發器 - PhpMyAdmin
- 26. MySQL防止在一列中使用觸發器修改數據
- 27. PostgreSql中的函數和觸發器
- 28. postgresql中的ROLLBACK事件觸發器
- 29. 確定Postgresql中觸發器的來源
- 30. 刪除觸發器中的行(PostgreSQL)
如果我還有一個在受影響的表上運行的複製系統,這項工作是否會進行? –