PostgreSQL中实现更新默认值

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘
































































以上是关于PostgreSQL中实现更新默认值的主要内容,如果未能解决你的问题,请参考以下文章

在片段中实现 onClickListener

如何在 PostgreSQL 中自动更新时间戳

在片段中实现对话框时,必须在添加内容之前请求窗口功能

设置默认值时出现空约束错误 Ruby On Rails - Postgresql

在多个片段中的片段中实现选项卡

如何在nodejs + postgresql中实现分页