首页 文章 精选 留言 我的

精选列表

搜索[PostgreSQL],共4410篇文章
优秀的个人博客,低调大师

SQL 中删除超出时间限制的数据,并返回删除数据信息(Mybatis+postgresql)

前言 前一阵子,接到一个活,主要内容是这样的,数据库中存在一些过期的日志(可能是一天前的数据,或者是一个月前的数据,等等),将这些数据删除掉,并且返回这些数据的信息(就是说我得知道自己到底删了哪些数据呀?)。苦于在网上找了好久,终无果,于是清明小长假,便在自己的mac上,简单的搭了个环境,试了一下,谁让自己是初出茅庐的小菜鸟呢。因为看到网上很多都是关于sql如何操作的,但是并没有结合Mybatis的,所以在这里记录一下,方便自己日后使用,也希望可以帮到那些一直寻找的人。 正文 先给大家看一下我自拟的表结构: -- ---------------------------- -- Table structure for eventLog -- ---------------------------- DROP TABLE IF EXISTS "public"."eventLog"; CREATE TABLE "public"."eventLog" ( "id" int4 NOT NULL DEFAULT nextval('"eventLog_id_seq"'::regclass), "start_time" timestamp(6), "log_detail" varchar(255) COLLATE "pg_catalog"."default" ) ; ALTER TABLE "public"."eventLog" OWNER TO "harry"; -- ---------------------------- -- Primary Key structure for table eventLog -- ---------------------------- ALTER TABLE "public"."eventLog" ADD CONSTRAINT "eventLog_pkey" PRIMARY KEY ("id"); 表很简单,一共有三个字段,id为自增主键, start_time 为需要看是否过期的字段,log_detail 为这个日志的详细内容。 接下来贴出大家关心的 Mybatis 中的代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.harry.dao.EventLogMapper"> <resultMap id="BaseMap" type="com.example.harry.entity.EventLog"> <id column="id" property="id" jdbcType="INTEGER" javaType="java.lang.Integer"/> <result column="start_time" property="time" jdbcType="TIMESTAMP" javaType="java.sql.Timestamp"/> <result column="log_detail" property="logDetail" jdbcType="VARCHAR" javaType="java.lang.String"/> </resultMap> <insert id="insertEventLog" parameterType="EventLog" useGeneratedKeys="true" keyProperty="id"> insert into "eventLog" (start_time,log_detail) values (now(),#{logDetail}); </insert> <select id="deleteOverdueLog" resultType="map"> DELETE FROM "eventLog" <![CDATA[ WHERE start_time < now()::TIMESTAMP + '-${overdueDays} days']]> RETURNING id, start_time, log_detail; </select> </mapper> 最重要的就是哪个select方法,很多人就要问了,为什么是delete的语句,你却要用select的标签呢?这个问题问的好,刚开始我也是用的delete,但是不管sql怎么写,返回的都是一个Integer,然后转念一想,Mybatis是基于JDBC的,在JDBC中 增删改执行的都是 executeUpdate方法,这个方法返回整数就是受影响的行数,所以如果想在删除的同时,返回删除行的信息,就一定要用select。在这里,我想要强调四点:1.我这里让它返回的是个List>所以 使用的是 resultType="map" 如果想要装载进EventLog的实体类中,我们可以使用 resultMap="BaseMap" 关于resultType和resultMap的区别,我就不在这里赘述了,详细的可以查看官网(赞一下官网,写的真的很好)。2. overdueDays是我传递进来的Integer的参数,代表的是具体的天数,可以配置在application.properties中,方便由于业务修改造成的变化。这里使用的是 ${},而不是#{}。是因为#{}会做防注入处理,把参数换为 ‘?’,并且将参数自动的加上引号,而${} 就不会只是单纯的做替换。3. something 这里可以把something换成任意语句,并且something的语句不会被转义,因为我们这里用到了'<',' ' '(就是小于号和单引号),所以我们不希望它被转义。4. RETURNING 后面接的就是我们具体想要返回删除行的哪些字段。 Tips:SQL除了以上写法,还有另一种写法: WITH deleteInfo AS (DELETE FROM "eventLog" <![CDATA[ WHERE start_time < now()::TIMESTAMP + '-${overdueDays} days']]> RETURNING id, start_time, log_detail) SELECT * FROM deleteInfo; 后记 具体的项目我已经上传到了 github上,如果有需要可以进行下载https://github.com/luckypoison/postgresBootLearn.git谢谢大家

优秀的个人博客,低调大师

SpringBoot应用和PostgreSQL数据库部署到Kubernetes上的一个例子

创建一个名为ads-app-service的服务: 上述Service的yaml文件里每个字段,在Kubernetes的API文档里有详细说明。 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#servicespec-v1-core 如何找到这个url呢? Reference->API Reference->v1.12: 比如Service yaml文件里Spec区域需要出现的字段,每个字段在帮助文档里有详细说明: Spec部分的子区域ports可以定义多个port,通过符号"-"代表一个类似数组的结构: ports数组里每个元素包含的字段: name nodePort port protocol targetPort 用kubectl create -f

优秀的个人博客,低调大师

数据库教程FGMT47‑PostgreSQL数据类型与数据库设计规范

风哥教程本文面向数据库DBA、运维工程师、数据库架构师、后端开发人员,完整讲解数据库对象设计、字符集与本地化、各类数据类型选型、生产环境表结构设计规范。数据库设计是业务系统根基,不合理的字段类型、错误的字符集排序规则、混乱的schema划分,会带来索引失效、排序异常、存储膨胀、查询性能低下、业务数据错乱等一系列难以修复的问题;很多故障在上线之后无法直接修改,只能重建数据库迁移数据,维护成本极高。

优秀的个人博客,低调大师

当 PostgreSQL 面临性能瓶颈:80TB 电商业务迁移至 Apache Doris 的实践思考

在与客户交流过程中,我们曾遇到一家电商企业,其分析数据规模已达到 80TB。为了支撑不同业务场景,团队分别部署了仪表盘、商品搜索和向量检索三套独立系统。随着业务发展,系统间的数据同步、运维和故障排查成本持续增加,维护多套系统逐渐成为新的挑战。最终,该团队基于 Apache Doris完成了相关能力的统一建设,在满足业务需求的同时,也显著降低了系统复杂度。类似的情况在企业数字化建设过程中并不少见。当分析业务不断演进、系统持续增加时,团队往往需要重新评估现有架构是否仍然适合业务发展。在着手重构之前,更值得思考的是:当前面临的问题是否已经达到需要引入新技术栈、投入额外资源解决的程度。如果答案是肯定的,希望本文能够为相关技术选型和架构演进提供一些参考。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册