Eha*_*hab 3 sql postgresql backend odoo
我正在开发 Odoo(一个使用 Postgresql 数据库的 ERP Web 应用程序)。
在这个软件中我可以创建销售发票、采购订单、会计日记帐分录等。
当我从 UI 进行任何事务时,我需要知道数据库中发生了什么(更新了哪些表、创建/删除了哪些记录等)
小智 7
跟踪 PostgreSQL 中表的更改的最简单方法是编写和使用通用 PL 或 pgSQL 函数。
\n假设您创建一个表来存储历史记录:
\nCREATE SCHEMA logging;\nCREATE TABLE logging.t_history (\nid serial,\ntstamp timestamp DEFAULT now(),\nschemaname text,\ntabname text,\noperation text,\nwho text DEFAULT current_user,\nnew_val json,\nold_val json\n);\nRun Code Online (Sandbox Code Playgroud)\n添加一个函数来跟踪此表中的更改:
\nCREATE FUNCTION change_trigger() RETURNS trigger AS $$\nBEGIN\nIF TG_OP = 'INSERT'\nTHEN\nINSERT INTO logging.t_history (tabname, schemaname, operation, new_val)\nVALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, row_to_json(NEW));\nRETURN NEW;\nELSIF TG_OP = 'UPDATE'\nTHEN\nINSERT INTO logging.t_history (tabname, schemaname, operation, new_val, old_val)\nVALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP,\nrow_to_json(NEW), row_to_json(OLD));\nRETURN NEW;\nELSIF TG_OP = 'DELETE'\nTHEN\nINSERT INTO logging.t_history (tabname, schemaname, operation, old_val)\nVALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, row_to_json(OLD));\nRETURN OLD;\nEND IF;\nEND;\n$$ LANGUAGE 'plpgsql' SECURITY DEFINER;\nRun Code Online (Sandbox Code Playgroud)\n如果您使用此机制来跟踪更改,请确保更改数据的人无法在日志中进行更改。为了确保这一点,将触发器函数标记为\xe2\x80\x98Security Definer\xe2\x80\x99以便当用户进行某些更改时该函数永远不会自行执行。
| 归档时间: |
|
| 查看次数: |
9466 次 |
| 最近记录: |