• PostgreSQL中实现更新默认值(二)


    今天我们用表继承+触发器的方案,来实现表中的更新默认值。这也许是PostgreSQL里最佳的解决方案。

    一. 创建一张表,作为父表

    create table basic_update
    (
    t_update timestamp
    );

    二. 创建一个函数,用作最后负责修改t_update使用

    CREATE OR REPLACE FUNCTION update_modified_column()
    RETURNS TRIGGER AS $$
    BEGIN
    NEW.t_update = now();
    RETURN NEW;
    END;
    $$
    language 'plpgsql';

    三. 创建一个函数,用来给继承了basic_update的表新增一个触发器,怼上第二步的函数

    create function table_create()
    returns event_trigger
    language plpgsql
    as $$
    DECLARE oid INT;
    table_name VARCHAR;
    parent_tables VARCHAR [];
    is_update BOOL;

    BEGIN

    SELECT object_identity
    INTO table_name FROM pg_event_trigger_ddl_commands();

    SELECT objid
    INTO oid FROM pg_event_trigger_ddl_commands();


    SELECT get_parent_tables_by_oid(oid)
    INTO parent_tables;

    大专栏  PostgreSQL中实现更新默认值(二) SELECT parent_tables :: TEXT [] @> '{basic_update}' :: TEXT []
    INTO is_update;


    IF is_update

    THEN
    EXECUTE 'CREATE TRIGGER tgr_auto_t_update'
    || ' BEFORE UPDATE ON '
    || table_name
    || ' FOR EACH ROW EXECUTE PROCEDURE update_modified_column()';
    END IF;

    END;

    四. 创建一个建表时的触发器,接管创建表的时机,怼上第三步的函数

    CREATE EVENT TRIGGER etgr_table_create
    ON ddl_command_end
    WHEN TAG IN ('CREATE TABLE')
    EXECUTE PROCEDURE table_create();

    五. 所有操作已经完成,可以创建一个表测试了

    create table test
    (
    id varchar default uuid_generate_v4() not null
    constraint test_pkey
    primary key,
    text varchar,
    t_create timestamp default now()
    )
    inherits (basic_update);
    insert into test (text)
    values ('a');
    update test
    set text = 'b'
  • 相关阅读:
    插入排序(C语言版)
    2015蓝桥杯分机号(C++C组)
    2015蓝桥杯二项式
    2016蓝桥杯报纸页数(C++C组)
    区块链
    C语言学生管理系统完善版
    数据结构队列
    C语言数据结构队列
    C语言数据结构栈
    javascript 事件
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12014166.html
Copyright © 2020-2023  润新知