当前位置: 首页 > news >正文

站长统计入口网站的宣传推广方式

站长统计入口,网站的宣传推广方式,深圳市工程招标网中标公告,网站域龄查询PostgreSQL的扩展moddatetime moddatetime 是 PostgreSQL 的一个内置扩展,用于自动维护表的最后修改时间字段。这个扩展可以自动更新指定字段为当前时间戳,非常适合需要跟踪记录最后修改时间的应用场景。 一、moddatetime 基本功能 核心特性 自动更新…

PostgreSQL的扩展moddatetime

moddatetime 是 PostgreSQL 的一个内置扩展,用于自动维护表的最后修改时间字段。这个扩展可以自动更新指定字段为当前时间戳,非常适合需要跟踪记录最后修改时间的应用场景。

一、moddatetime 基本功能

核心特性

  • 自动更新时间戳:当行数据被更新时自动设置指定字段为当前时间
  • 触发器实现:基于 PostgreSQL 的触发器机制
  • 轻量级:作为 contrib 模块,不引入额外开销

二、安装与启用

1. 安装扩展

-- 连接到目标数据库后执行
CREATE EXTENSION IF NOT EXISTS moddatetime;

2. 验证安装

-- 检查已安装扩展
SELECT * FROM pg_extension WHERE extname = 'moddatetime';-- 查看扩展函数
\df moddatetime()

三、基本使用方法

1. 创建带有时间戳字段的表

CREATE TABLE documents (id SERIAL PRIMARY KEY,title VARCHAR(255) NOT NULL,content TEXT,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,modified_at TIMESTAMP  -- 这个字段将由moddatetime自动维护
);

2. 创建触发器

-- 设置modified_at字段自动更新
CREATE TRIGGER update_document_modtime
BEFORE UPDATE ON documents
FOR EACH ROW
EXECUTE FUNCTION moddatetime(modified_at);

四、高级用法示例

1. 多字段自动更新

-- 如果需要同时维护created_at和modified_at
CREATE OR REPLACE FUNCTION update_timestamps()
RETURNS TRIGGER AS $$
BEGINIF TG_OP = 'INSERT' THENNEW.created_at = NOW();NEW.modified_at = NOW();ELSIF TG_OP = 'UPDATE' THENNEW.modified_at = NOW();END IF;RETURN NEW;
END;
$$ LANGUAGE plpgsql;CREATE TRIGGER trg_update_timestamps
BEFORE INSERT OR UPDATE ON documents
FOR EACH ROW
EXECUTE FUNCTION update_timestamps();

2. 条件性更新时间戳

-- 只在特定列变更时更新时间戳
CREATE OR REPLACE FUNCTION conditional_moddatetime()
RETURNS TRIGGER AS $$
BEGINIF NEW.content IS DISTINCT FROM OLD.content OR NEW.title IS DISTINCT FROM OLD.title THENNEW.modified_at = NOW();END IF;RETURN NEW;
END;
$$ LANGUAGE plpgsql;CREATE TRIGGER trg_conditional_modtime
BEFORE UPDATE ON documents
FOR EACH ROW
EXECUTE FUNCTION conditional_moddatetime();

五、实际应用场景

1. 审计日志辅助

-- 结合审计表记录完整修改历史
CREATE TABLE document_audit (audit_id BIGSERIAL PRIMARY KEY,operation CHAR(1) NOT NULL,document_id INT NOT NULL,changed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,old_data JSONB,new_data JSONB
);CREATE OR REPLACE FUNCTION log_document_changes()
RETURNS TRIGGER AS $$
BEGINIF TG_OP = 'UPDATE' THENINSERT INTO document_audit(operation, document_id, old_data, new_data)VALUES ('U', OLD.id, to_jsonb(OLD), to_jsonb(NEW));ELSIF TG_OP = 'DELETE' THENINSERT INTO document_audit(operation, document_id, old_data)VALUES ('D', OLD.id, to_jsonb(OLD));ELSIF TG_OP = 'INSERT' THENINSERT INTO document_audit(operation, document_id, new_data)VALUES ('I', NEW.id, to_jsonb(NEW));END IF;RETURN NULL;
END;
$$ LANGUAGE plpgsql;CREATE TRIGGER trg_document_audit
AFTER INSERT OR UPDATE OR DELETE ON documents
FOR EACH ROW
EXECUTE FUNCTION log_document_changes();

2. 多租户系统中的应用

CREATE TABLE tenant_records (id BIGSERIAL PRIMARY KEY,tenant_id INT NOT NULL,record_data JSONB NOT NULL,created_by INT NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_by INT,updated_at TIMESTAMP,FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);CREATE OR REPLACE FUNCTION update_tenant_record_meta()
RETURNS TRIGGER AS $$
BEGINIF TG_OP = 'INSERT' THENNEW.created_at = NOW();ELSIF TG_OP = 'UPDATE' THENNEW.updated_at = NOW();NEW.updated_by = current_setting('app.current_user_id')::INT;END IF;RETURN NEW;
END;
$$ LANGUAGE plpgsql;CREATE TRIGGER trg_tenant_record_meta
BEFORE INSERT OR UPDATE ON tenant_records
FOR EACH ROW
EXECUTE FUNCTION update_tenant_record_meta();

六、性能考虑与优化

1. 触发器开销分析

  • 每个表的 UPDATE 操作都会触发触发器执行
  • 在频繁更新的表上可能影响性能
  • 建议对高负载表进行性能测试

2. 批量操作处理

-- 批量更新时临时禁用触发器
ALTER TABLE documents DISABLE TRIGGER update_document_modtime;-- 执行批量更新操作
UPDATE documents SET content = content || '\nUpdated' 
WHERE id BETWEEN 1000 AND 2000;-- 手动设置修改时间并重新启用触发器
UPDATE documents SET modified_at = NOW() 
WHERE id BETWEEN 1000 AND 2000 AND modified_at IS NULL;ALTER TABLE documents ENABLE TRIGGER update_document_modtime;

七、与其他方法的比较

方法优点缺点
moddatetime 扩展简单易用,标准化功能较基础
自定义触发器高度灵活,可定制逻辑需要自行维护代码
应用层控制业务逻辑可见容易遗漏更新
监听逻辑解码不侵入业务代码配置复杂,延迟较高

八、最佳实践建议

  1. 命名规范

    • 使用一致的字段名如 created_atupdated_at
    • 触发器名称包含表名和用途,如 trg_[table]_update_time
  2. 文档记录

    COMMENT ON TRIGGER update_document_modtime ON documents IS 
    '自动维护modified_at字段,记录最后更新时间';
    
  3. 测试策略

    • 验证触发器在并发更新时的行为
    • 检查批量操作时的性能影响
  4. 监控维护

    -- 检查所有使用moddatetime的表
    SELECT tgname, tgrelid::regclass 
    FROM pg_trigger 
    WHERE tgname LIKE '%modtime%';
    

moddatetime 是PostgreSQL中维护最后修改时间的轻量级解决方案,特别适合需要简单可靠地跟踪记录变更时间的应用场景。对于更复杂的需求,可以考虑结合自定义触发器或专门的审计解决方案。

http://www.yayakq.cn/news/124838/

相关文章:

  • 长春做网站 长春万网如何选择大连网站建设
  • 网站建设开发环境英文外贸商城网站设计
  • 凡科网站做网站多少钱抚州南城网站建设
  • 上海网站建设公司官网wordpress 菜单两列显示不出来
  • 网站的结构与布局优化设计诸暨北京网站制作公司有哪些
  • 跨境电商网站模板南宁做网约车怎么样
  • 网站主页用ps做一级消防工程师考试大纲
  • 松江区环保局网站建设项目备案网站建设的常用技术有哪些
  • 宁夏银川做网站的公司有哪些渠道推广代理
  • dz网站标题福建省建设干部培训中心网站
  • 做网站公司销售开场白saas小程序开发
  • 重庆网站seo建设哪家好网站开发课题研究背景
  • 珠海建站模板源码用wordpress做聊天
  • 成立一个网站需要多少钱专业制作网站用哪些软件
  • 网站备案号格式说明书2022近期时事热点素材摘抄
  • 网站建设属于什么类的采购内蒙古建设工程造价信息网官方网站
  • 网站建设申请报告岳阳县住房和城乡建设局网站
  • cgi做的网站seo资源网站 排名
  • 网站建设应注意什么问题商城网站开发文档
  • 网站添加关键字wordpress需要做哪些设置
  • dede 网站内页标题修改中 网站建设 扬州
  • 模板网站的劣势做网站网站会被判多久
  • iis的默认网站没有自动启动pc网站建设哪个好
  • c做网站教程个人博客网站怎么赚钱
  • 学校建设网站前的市场分析小吃培训网站源码
  • 专门做推广的软文百度seo工具
  • 紫云网站建设网站模板免费吗
  • 每一个网站都是响应式吗网站建设的基本术语
  • 网站建设常见问题及解决办法六安建设网站
  • wordpress主题的网站单位网站建设意见建议