微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Postgres 中自动创建对 CREATE 的评论?

如何解决如何在 Postgres 中自动创建对 CREATE 的评论?

我想创建一个触发器,一旦在模式中创建表,它就会被触发。这个触发器应该向新创建的表添加注释,例如:

[0,2pi]

CREATE TRIGGER my_trigger AFTER CREATE ON my_schema EXECUTE PROCEDURE add_comment; 做一些类似的事情:

add_comment

但是,我似乎只能在表级别添加触发器。我怎样才能实现在纯 Postgres 中向新创建的表添加注释?

解决方法

您需要一个 EVENT TRIGGER

首先创建一个函数:

CREATE OR REPLACE FUNCTION trg_create_table_comment() RETURNS event_trigger
LANGUAGE plpgsql AS $$
DECLARE obj record;    
BEGIN
  SELECT * FROM pg_event_trigger_ddl_commands() INTO obj;
  EXECUTE 'COMMENT ON TABLE ' || obj.object_identity || ' IS ''Created by ' || SESSION_USER || ' on ' || NOW() || '''';
END;
$$;

然后将其附加到 EVENT TRIGGER

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

创建表后会触发:

CREATE TABLE foo (id int);

SELECT schemaname,tablename,tableowner,description
FROM pg_tables t
LEFT JOIN pg_description d ON d.objoid = t.tablename::regclass::oid
WHERE tablename = 'foo';
    
 schemaname | tablename | tableowner |                    description                    
------------+-----------+------------+---------------------------------------------------
 public     | foo       | jones      | Created by jones on 2021-04-10 20:22:22.174874+02

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。