gpt4 book ai didi

postgresql - 如何为创建表或选择到创建事件触发器

转载 作者:行者123 更新时间:2023-11-29 11:58:37 32 4
gpt4 key购买 nike

我想为创建表或选择创建事件触发器,例如: 创建表 xxxx 时必须使用 'temp' 表名 bigen

我的代码

    CREATE OR REPLACE FUNCTION create_table_func()
RETURNS event_trigger
AS
$$
DECLARE
V_TABLE name := TG_TABLE_NAME;

BEGIN

if V_TABLE !~ '^temp'

then

RAISE EXCEPTION 'must bigen with temp';

end if;

END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE EVENT TRIGGER create_table_1 ON ddl_command_start

WHEN TAG IN ('SELECT INTO')

EXECUTE PROCEDURE create_table_func();

但是执行的时候从 test_bak 中选择 * 进入 test11

[Err] 错误:“tg_table_name”列不存在

最佳答案

这是我的代码,它满足我的需求

代码:

CREATE OR REPLACE FUNCTION trg_create_table_func()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag in ('SELECT INTO','CREATE TABLE','CREATE TABLE AS')
LOOP
if obj.object_identity !~ 'public.temp_'
THEN
raise EXCEPTION 'The table name must begin with temp_';
end if;
END LOOP;
END;
$$;

CREATE EVENT TRIGGER trg_create_table ON ddl_command_end
WHEN TAG IN ('SELECT INTO','CREATE TABLE','CREATE TABLE AS')
EXECUTE PROCEDURE trg_create_table_func();

输出记录

[Err] 错误:表名必须以 temp_ 开头上下文:PL/pgSQL 函数 trg_create_table_func() 第 10 行在 RAISE

很酷~

关于postgresql - 如何为创建表或选择到创建事件触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46641653/

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