![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PostgreSQL学习笔记
文章平均质量分 54
令人作呕的溏心蛋
人生何处不青山
展开
-
Spring Boot 中 PGSQL 判断打卡点是否经过轨迹优化代码,循环查询物理表修改生成临时表,向临时表插入数据后再做ST_DWithin判断,引入线程池提升判断效率
记录一下一个业务问题,流程是这样的,我现在有一个定时任务,5分钟执行一次,更新车辆打卡的情况。现在有20俩车,每辆车都分配了路线,每条路线都有打卡点,每个打卡点分配了不同的时间段,也就是说,一条路线可能有几百个打卡点,这几百个打卡点中每一个都分配了时间段,有可能是1个时间段,比如8:00 - 10:00这个时间段,要去打卡。也有可能有的打卡点分配了几个时间段,比如上午两个时间段,下午两个时间段。这个时候要去判断今天的打卡情况,只能先获取路线的打卡点,然后再获取单个打卡点下面的时间段,再进行判断操作。但是问题原创 2024-07-02 20:37:01 · 627 阅读 · 0 评论 -
解决数据库PGSQL,在Mybatis中创建临时表报错TODO IDENTIFIER,连接池用的Druid。更换最新版本Druid仍然报错解决
然后我找到了Druid的配置,把全部配置都注释掉,居然可以成功的执行了。然后我一个一个配置排查发现,有个filters的配置,引起的报错,只要把这个注释了,就能成功执行,不管切换什么版本的Druid。我在navicat中尝试了一下执行相同的sql创建临时表语句,确实是能执行的。然后我又进行了一次测试,在xml中的sql创建临时表语句把TEMPORARY删除,直接创建一张物理表,确实成功的执行了。在网上搜索了一下,说把Druid版本升级到最新,我试着升级到了最新,确实不报这个错误了,又报了一个新的错误。原创 2024-07-02 19:19:00 · 307 阅读 · 0 评论 -
PostgreSql中使用to_char函数、date()函数可能会导致索引无法充分利用,导致查询速度无法提升
这时候去搜了一下才知道pgsql的to_char函数可能会导致索引无法充分利用,也就是说必须把to_char改成TIMESTAMP去定义日期。在我的SQL语句中,to_char(c1.binder_gen_time, ‘YYYY-MM-DD’) 会将 binder_gen_time 转换为字符串,这会导致无法使用日期列上的索引。使用 to_char 函数可能会导致索引无法充分利用的情况,因为函数会改变列的数据类型,这样就无法使用索引来加速查询。查询时间花费了4s左右。原创 2024-06-13 15:20:51 · 485 阅读 · 0 评论 -
PostgreSql常用的时间类型以及对应Java中的类型以及在Mybatis XML中转换
TIMESTAMP:用于存储日期和时间信息,精确到毫秒,例如:‘2024-06-06 10:30:00.123’。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。toDay为LocalDate类型,如2024-06-06。类型对应Java中的。原创 2024-06-06 13:52:31 · 619 阅读 · 0 评论 -
Spring Boot中如何查询PGSQL分表后的数据
数据库用的pgsql,在表数据超过100w条的时候执行定时任务进行了分表,分表后表名命名为原的表名后面拼接时间,如原表名是card_device_trajectory_info,分表后拼接时间后得到card_device_trajectory_info_20240503,然后分表后把原来的表重置为空。这样就把100w条数据放到了card_device_trajectory_info_20240503里面,card_device_trajectory_info重置空,以此类推。原创 2024-05-28 15:22:48 · 615 阅读 · 0 评论 -
Java中PostgreSQl一大批数据(3000+)插入数据库,后台直接报错An I/O error occurred while sending to the backend.
Java中PostgreSQl一大批数据(3000+)插入数据库,后台直接报错An I/O error occurred while sending to the backend.原创 2024-05-08 09:01:53 · 327 阅读 · 1 评论 -
Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内
轨迹数据判断是否经过打卡点,轨迹数据太多,循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线,然后只需要循环打卡点即可,打卡点不多,一般不会超过100个,如果多的话,另说。。一般也就几个,也就是说有多少个打卡点就需要循环多少次,打卡点少,我们就可以使用循环去判断打卡点是否在线的范围内即可。原创 2024-04-22 10:08:47 · 526 阅读 · 3 评论 -
【PostgreSQL】已解决Spring Boot中Mybatis模糊查询时出现 could not determine data type of parameter $1
我看了一下我的roleId居然是Long类型的,导致出现could not determine data type of parameter $1的问题,我们需要把你类型转一下就好了!原创 2024-04-02 10:53:06 · 1493 阅读 · 0 评论 -
如何在Spring Boot中使用@Scheduled写定时任务判断数据量是否过大,过大则进行分表操作,多张表使用临时视图查询
在使用 CREATE TABLE ... AS SELECT * FROM ... 语句时,添加 WHERE 1=0 和不添加的区别在于是否复制原表的数据。 - [x] 不加 `WHERE 1=0`:这会将原表中的数据一同复制到新表中。新表将包含原表中所有的行数据。 - [x] 加上 `WHERE 1=0`:这样做不会复制任何原表中的数据,只会复制原表的结构(列定义)到新表中,但新表不会包含任何行数据。因此,如果只复制表的结构而不需要复制数据,可以在 CREATE TABLE ... AS SEL原创 2024-01-04 11:32:30 · 1272 阅读 · 0 评论 -
PostgreSQL获取当天、昨天、本月、上个月、本年、去年的数据
【代码】PostgreSQL获取当天、昨天、本月、上个月、本年、去年的数据。原创 2024-01-03 09:21:51 · 4253 阅读 · 0 评论 -
PostgresSQL锁表后通过pid杀死进程即可解决
pid为第二条语句查出来的所有数据,里面有个字段叫pid,可能会有多条。依次输入pid执行第三条语句直到界面弹出一个报错就代表表已经解开了。原创 2023-12-21 17:57:05 · 896 阅读 · 0 评论 -
PostgresSQL数据库中分区和分表的区别以及PostgresSQL创建表分区分表示例,使用分区视图来统一查询不同表的数据
例如,如果你有一个名为 sales 的表,并使用 PARTITION BY RANGE (sale_date) 进行分区,那么你可以创建多个分区表,例如 sales_2020、sales_2021、sales_2022 等。存储方式不同:分表是将一个表拆分成多个独立的物理表,分区则是将一个表分成多个逻辑部分,每个分区可以存储在不同的物理表空间中,也可以共享一个物理表空间。通过范围分区,你可以根据数据的范围值将其分布到不同的物理表上,这样可以实现更快的查询速度和更好的数据管理。下面是我创建的两个分区分别为。原创 2023-12-20 20:18:37 · 1699 阅读 · 0 评论 -
解决net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “>=“ <OP_GREATERTHANEQUALS>
Sql在Navicat里面能执行,但是在项目中却执行不了报错。直接在Mapper接口对应的方法上加上这个注解就好了!原创 2023-09-21 13:15:37 · 432 阅读 · 0 评论 -
PostgreSQL中根据时间段范围查询数据,如19:29:10到20:29:10范围内的数据,排除年月日
因为TO_CHAR函数的第二个参数是用于指定时间格式的字符串。在SQL语句中,使用了’YYYY-MM-DD HH:mm:ss’这个格式字符串。这意味着,binder_gen_time字段的时区也会被考虑在内。如果想要在比较时忽略时区,可以将格式字符串修改为’YYYY-MM-DD HH24:MI:SS’。这个格式字符串将不会包含时区部分。但是我的需求是,只想要时间段范围内的数据,年月日无所谓。为什么我数据的时间是2023-07-20 17:58:29也能被查出来?我的SQL语句条件是。原创 2023-08-11 13:05:36 · 1399 阅读 · 0 评论