Postgresql 循环浏览所有用户表并在每个表中插入行

Postgresql 循环浏览所有用户表并在每个表中插入行,postgresql,plpgsql,Postgresql,Plpgsql,不知什么原因,我就是想不出来。我在PostgreSQL中有一个单独的模式,用于连接到服务器的每个用户的通知相关表。我的计划是让每个用户创建一个临时表,从中接收额外的通知信息,因为Xojo不支持PostgreSQL有效负载。 我觉得我已经开始接近了,所以我会在我的触发器函数中发布我的代码 DECLARE my_table RECORD; BEGIN FOR my_table IN SELECT table

不知什么原因,我就是想不出来。我在PostgreSQL中有一个单独的模式,用于连接到服务器的每个用户的通知相关表。我的计划是让每个用户创建一个临时表,从中接收额外的通知信息,因为Xojo不支持PostgreSQL有效负载。 我觉得我已经开始接近了,所以我会在我的触发器函数中发布我的代码

    DECLARE
        my_table    RECORD;
    BEGIN       
        FOR my_table IN 
            SELECT table_name
            FROM   information_schema.tables
            WHERE  table_schema = 'information_schema'
        LOOP
            INSERT INTO my_table.table_name (effected_row_id)
                VALUES (NEW.effected_row_id);
        END LOOP;
    END;
如果我错了,请告诉我,但我相信我的主要问题是如何在INSERT语句中使用SELECT语句返回的表名

编辑: 这是我当前的触发函数

-- Function: notification.my_insert_trigger_function()

-- DROP FUNCTION notification.my_insert_trigger_function();

CREATE OR REPLACE FUNCTION notification.my_insert_trigger_function()
  RETURNS trigger AS
$BODY$DECLARE
    my_table    RECORD;
BEGIN       
    FOR my_table IN 
        SELECT table_name
        FROM   information_schema.tables
        WHERE  table_schema = 'notification' AND table_name <> 'notification_global' AND table_name <> 'switcher'
    LOOP
        EXECUTE(FORMAT($f$
        INSERT INTO %s (effected_row_username)
            VALUES (%s);
        $f$, 'notification.' || my_table.table_name, NEW.effected_row_username));
    END LOOP;
RETURN new;
END;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION notification.my_insert_trigger_function()
  OWNER TO serveradmin;
您需要在触发器函数中使用。 这个函数通常非常有用

DECLARE
    my_table    RECORD;
BEGIN       
    FOR my_table IN 
        SELECT table_name
        FROM   information_schema.tables
        WHERE  table_schema = 'information_schema'
    LOOP
        EXECUTE(FORMAT($f$
        INSERT INTO %s (effected_row_id)
            VALUES (%s);
        $f$, my_table.tablename, NEW.effected_row_id));
    END LOOP;
END;

你能给我看看这张桌子的DDL吗?我很乐意。你能给我解释一下怎么做吗?没关系,我知道怎么做DDL了。你想要那张桌子?将在触发器中使用此函数的表,还是此函数将影响的其中一个表?我会将后者添加到我的原始帖子中。这不是答案,但数据库中的任何结构都像这样重复,这对我来说意味着缺少规范化,我建议你重新考虑你的设计。谢谢你,克林,我很快就能完成这项工作,但我还有一个问题。我使用了你的触发功能,并做了一些更改,以完全符合我的需要。我的问题是,我不断收到一个错误,说ServerAdmin列不存在。它从变量“New.effected\u row\u username”获取serveradmin。我想弄清楚的是如何将文本从'New.impfected_row_username'传递到impfected_row_username字段。我将在原始帖子中发布修改后的代码。现在该函数尝试插入值serveradmin,但应该插入值“serveradmin”。因此必须添加撇号:值“%s”。