MD *_*med 5 postgresql plpgsql database-trigger
我有一个表测试的触发器函数,它具有以下代码片段:
IF TG_OP='UPDATE' THEN
IF OLD.locked > 0 AND
( OLD.org_id <> NEW.org_id OR
OLD.document_code <> NEW.document_code OR
-- other columns ...
)
THEN
RAISE EXCEPTION 'Message';
-- more code
Run Code Online (Sandbox Code Playgroud)
所以我静态检查所有列的新值及其先前的值以确保完整性.现在,每当我的业务逻辑发生变化并且我必须在该表中添加新列时,我每次都必须修改此触发器.我认为如果不知何故我可以动态检查该表的所有列,而不显式输入其名称会更好.
怎么做到呢?
看一下information_schema,有一个视图"列".执行查询以从触发触发器的表中获取所有当前列名:
SELECT
column_name
FROM
information_schema.columns
WHERE
table_schema = TG_TABLE_SCHEMA
AND
table_name = TG_TABLE_NAME;
Run Code Online (Sandbox Code Playgroud)
循环结果,你去!
更多信息可以在精细手册中找到.
| 归档时间: |
|
| 查看次数: |
9711 次 |
| 最近记录: |