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‘ |
相关推荐
89921334 2020-06-26
WanKaShing 2020-11-12
zhbvictor 2020-10-29
kls00 2020-10-15
89921334 2020-07-29
83911930 2020-07-28
89407707 2020-06-27
89244553 2020-06-21
84593973 2020-06-21
83911930 2020-06-16
yaoding 2020-06-14
89244553 2020-06-11
89407707 2020-06-11
89921334 2020-06-10
89407707 2020-06-10
goodriver 2020-06-09
kevinli 2020-06-06
84593973 2020-06-05