我將在帶有觸發器的函式中將模式名稱作為變數傳遞
函式和觸發器是這樣定義的:
CREATE OR REPLACE FUNCTION test() RETURNS TRIGGER AS $shp_create$
BEGIN
RAISE NOTICE 'NEW: %', NEW;
IF NEW.log_type = false THEN
INSERT INTO target_table
SELECT * FROM $%%NEW.schema_or%%%.start_table
NEW.log_type := true;
RETURN NEW;
END IF;
RETURN NEW;
END;
$test$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS test_trigger ON table_log;
CREATE TRIGGER test_trigger BEFORE INSERT ON table_log
FOR EACH ROW EXECUTE PROCEDURE test();
table_log 是這樣定義的:
log_type|schema_or
--------|---------
false test
所以函式中的Insert陳述句變成:
INSERT INTO target_table
SELECT * FROM test.start_table
uj5u.com熱心網友回復:
每個動態查詢:
EXECUTE format('INSERT INTO target_table
SELECT * FROM %I.start_table', NEW.schema_or )
這使用字串函式格式來創建一個可以執行的查詢字串。查看format鏈接以獲取有關可能的內容的完整說明。在這種情況下,%I指的是一個識別符號,即架構名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366097.html
標籤:PostgreSQL的 触发器 数据库模式
上一篇:如何在選擇中填充一組id?
