gpt4 book ai didi

postgresql - 使用postgresql中的触发器函数获取表中的所有列名

转载 作者:行者123 更新时间:2023-11-29 12:13:23 24 4
gpt4 key购买 nike

我如何在触发器函数中获取所有列名及其值,因为我需要在插入表之前验证所有列值。我尝试了下面的代码。如果我们知道列名意味着我们可以通过以下方式轻松获取值在触发器函数中使用 NEW 对象作为 NEW.myColumnName。但在这里我需要动态获取列名...

    CREATE FUNCTION insert_update_validate() RETURNS TRIGGER AS $$
DECLARE
BEGIN
FOR i IN 0..(TG_ARGV-1) LOOP
IF TG_ARGV[i] IS NULL THEN
RAISE EXCEPTION 'cannot have null VALUE', NEW.TG_ARGV[i];
END LOOP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

最佳答案

hstore是 PostgreSQL 的一部分,将行转换为 hstore 是迭代其列的主要方法,至少在 plpgsql 上下文中是这样。否则,作为一种语言,它不提供任何构造来从行中提取列名。

基本上它是关于遍历 each(store(NEW))。这是您可以使用的骨架:

CREATE FUNCTION insert_update_validate() RETURNS TRIGGER AS $$
DECLARE
k text;
v text;
BEGIN
FOR k,v IN select key,value from each(hstore(NEW)) LOOP
if v is null then
raise exception 'value is null for column %', k;
end if;
END LOOP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

关于postgresql - 使用postgresql中的触发器函数获取表中的所有列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19225498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com