据我了解,Database.Persist不会处理任何自动更新的字段(Yesod Book Persistent)。

但是存在一个与之相关的特殊情况(至少对我而言:P)是lastUpdate :: UTCTime字段(我喜欢它,并且我广泛用于了解数据更改)。

另外,此更新必须在数据库级别执行(如果没有,则所有服务器都应完全同步(这是困难而脆弱的),并且记录更新应在事务内部完成,以在其中包含getTime系统调用[无效])。

我当前的解决方法是(手动)创建触发器。

您知道更好的方法吗?

谢谢!

最佳答案

由于这似乎对您很重要,因此依赖数据库的now()是最安全的,因为这将始终使用事务的开始作为返回值。如果您在应用程序本身中计算时间,则必须非常小心地在各处传递相同的值。

您可以研究Haskell的esqueleto库来编写sql,这样您总是会对set列进行附加的lastUpdate调用。我认为它当前不公开sql now()函数,因此您可能希望将其自己添加到lib中。

10-06 02:43