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_triggerlanguage plpgsqlas $$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_createON ddl_command_endWHEN 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 testset text = ‘b‘

原文地址:https://www.cnblogs.com/lijianming180/p/12014166.html

时间: 2024-07-29 10:18:36

PostgreSQL中实现更新默认值(二)的相关文章

【Struts2学习笔记(2)】Action配置中的各项默认值和Action中result的各种转发类型

一.Action配置中的各项默认值 <span style="font-size:18px;"><package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction&quo

Action 名称搜索顺序&amp;Action配置中的各项默认值

Action 名称的搜索顺序  一级一级往上,若命名空间包存在,但Action不存在,则跑到默认命名空间. Action 配置中的各项默认值    默认类class:ActionSupport    默认方法method:action的 execute    默认result name :success

Swift——(五)Swift中的那些默认值

在Swift语言中,有很多默认值,这里将常用的总结,欢迎补充. @Author: twlkyao 1.函数(方法)形参 在函数(方法)中,形参默认是常量,这主要是为了防止误操作,在调用函数(方法)时改变了实参的值,所以使用常量,如果想在函数内部对实参进行修改,可以使用var关键字进行标识,但是这并没有结束,如果想在函数(方法)调用结束之后仍然可以使用修改后的值,需要使用inout关键字进行标识,同时不要使用var对形参进行标识,在调用函数(方法)的时候,传递的实参,需要使用"&"

弹窗中修改select默认值遇到的问题

弹窗中修改select默认值无效 前提: 项目中遇到一个需求, 在一个弹窗中,有很多个select都是在打开弹窗的同时由js自动生成的(每次打开都自动重新生成一遍). 弹窗打开后,从每个select的下拉选中选中一个值.然后弹窗下面有个确定按钮. 点确定 按钮,将每个select选中的值保存起来. 下次再次打开弹窗时,每个自动生成的select中都默认值显示上次选中的值. 我的思路是: 1.在每次点 确定 按钮 时: 新建一个 js 对象jsonObj,每次点 确定后把 每个select的id(

vue中$event理解和框架中在包含默认值外传参

vue中$event理解和框架中在包含默认值外传参:https://blog.csdn.net/qq_43702430/article/details/90692242?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1 原文地址:https://

关于java中属性变量默认值的问题。

主要分为两种 1.全局变量 char '/u0000' byte 0 short 0 int 0 long 0L float 0.0f double 0.0d boolean false 以上8种基本数据类型的默认值. 引用数据类型的默认值为null. 举例如下: 在平常的jdbc访问数据库的过程中,如果通过实体对象映射数据映射操作数据库,由于一些错误原因,其中实体对象中有引用数据类型的变量时没有给其赋值, 默认就是null,如果有null值参与数据库的操作,那么访问的过程中就会报SQL语句异常

Java中初始变量默认值

Java语言中有8种基本数据类型,基本情况汇总如下: 序号 数据类型 大小/位 封装类 默认值 可表示数据范围 1 byte(位) 8 Byte 0 -128~127 2 short(短整数) 16 Short 0 -32768~32767 3 int(整数) 32 Integer 0 -2147483648~2147483647 4 long(长整数) 64 Long 0L -9223372036854775808~9223372036854775807 5 float(单精度) 32 Flo

js中function参数默认值

--在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中调用它func(a,b),那flag和icon的值是什么,怎么定义默认值?谢谢! --默认值应该是 undefined 在函数内预设数可以用 arguments[i] i就是你参数的位置 第一个为0 所以要设定 flag 的默认值 则可以这么写 function func(string1,url,f

SASS 中变量的默认值

SASS 中定义的变量,后设置的值会覆盖旧的值. $color: red; $color: blue; .btn { color: $color; } 编译后为: .btn { color: blue; } 如果你编写了一个 UI 库提供 SASS 文件,可能会提供一些参数供用户使用时自定义.而在 SASS 组件内部,我们需要应用上用户设置的这些值.但是如果使用者没有自定义变量的值,那这些变量应该有自己的默认值. 利用前面提到的覆盖机制是不能实现的.因为无论是你在 @import UI 库之前设