首页 > 数据库技术 > 详细

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

时间:2019-12-10 00:45:53      阅读:87      评论:0      收藏:0      [点我收藏+]

今天我们用表继承+触发器的方案,来实现表中的更新默认值。这也许是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‘

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!