项目由于业务的需要,由之前的mysql数据库换成了postgresql数据库,需要对项目里的sql语句以及一些代码报错的地方进行修改,具体有如下的几个改动点:
1、是否空判断的函数替换
mysql中的ifnull()函数对应postgresql的coalesce
coalesce('字段名称','期望值')
这里我没有做这样的替换,而是改成了(case when 条件 then 期望值 else 默认值 end),因为case when可以适用所有的数据库。
2、比较时间差大小的函数
date_part('second', (now() - create_date)) --这个函数计算的时间差,只是计算了秒位上的差,并没有计算分、时、天、月、年上差的秒数。
extract(epoch from (now() - create_date)) --这个计算的两个时间点的差的所有秒数。
extract(epoch from (now() - to_timestamp('2024-02-01 11:06:00','yyyy-mm-dd HH24:mi:ss')))
3、update语句的修改
postgresql 两表关联更新
UPDATE 要更新的表
SET 字段1 = cqt.字段1,
字段2 = cqt.字段2,
FROM
数据来源表 cqt
WHERE
要更新的表.bsm = cqt.bsm
注意:where条件里,两个表的字段名如果一样,一定要加表别名,否则查询的是错误的。set后面的字段不能加表别名,否则报错。
4、代码里主要是变量的类型要和数据库里字段的类型保持一致,否则就报错
比如数据库字段是数字类型,而代码里变量的类型是字符串类型。另外在写sql语句的时候,条件两边的字段类型要一致,如果是常量也要保持类型一致。
mysql数据库类型不一致,会隐形转换,如果有索引就不走索引的,查询效率会很低。postgresql数据库直接就报错了,需要我们严格按照类型一致来写sql语句。
网友评论