插入行由於某種原因,我只是無法弄清楚這一點。我在PostgreSQL中有一個獨立的模式,用於連接到服務器的每個用戶的通知相關表。我的計劃是讓每個用戶創建一個TEMP表來接收來自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;
您可以顯示此表的DDL嗎? – Hambone
我很樂意。你能向我解釋怎麼做? –
沒關係,我想出瞭如何獲得DDL。你想要哪張桌子?將在觸發器中使用此函數的表或此函數將生效的其中一個表? 我會將後者添加到我原來的帖子 –