zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    我要录视频XML(一)
    JavaScript入门基础 (一)
    JQuery 入门24条
    3.The IoC container
    关于jquery.fn
    apche禁止列表显示文件夹中文件,并且显示特定界面
    Struts 2 + Spring 2 + JPA + AJAX
    3.The IoC container(2)
    4.9 Annotationbased container configuration
    3.5 Bean scopes
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12014166.html
Copyright © 2011-2022 走看看