PostgreSQL DBA(136) - Develop(Common Mistakes)
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本节简单介绍了在PostgreSQL中容易出错但又容易被忽略的细节。除法运算在整数和整数之间执行除法运算时,结果会是整数,但实际上我们希望保留小数位。[local:/data/pg12]:5432 p
千家信息网最后更新 2025年01月22日PostgreSQL DBA(136) - Develop(Common Mistakes)
本节简单介绍了在PostgreSQL中容易出错但又容易被忽略的细节。
除法运算
在整数和整数之间执行除法运算时,结果会是整数,但实际上我们希望保留小数位。
[local:/data/pg12]:5432 pg12@testdb=# select 1/2; ?column? ---------- 0(1 row)[local:/data/pg12]:5432 pg12@testdb=#
查询操作符"/"的定义
[local:/data/pg12]:5432 pg12@testdb=# select oprname,oprleft::regtype,oprright::regtype,oprresult::regtype from pg_operator where oprname = '/'; oprname | oprleft | oprright | oprresult ---------+------------------+------------------+------------------ / | smallint | smallint | smallint / | integer | integer | integer / | smallint | integer | integer / | integer | smallint | integer / | real | real | real / | double precision | double precision | double precision / | bigint | bigint | bigint / | bigint | integer | bigint / | integer | bigint | bigint / | bigint | smallint | bigint / | smallint | bigint | bigint / | point | point | point / | path | point | path / | box | point | box / | money | real | money / | money | double precision | money / | money | bigint | money / | money | integer | money / | money | smallint | money / | money | money | double precision / | real | double precision | double precision / | double precision | real | double precision / | circle | point | circle / | interval | double precision | interval / | numeric | numeric | numeric(25 rows)[local:/data/pg12]:5432 pg12@testdb=#
在PG中,整型之间的除法得到的结果为整型,如结果需要得到浮点数或实数,则需要执行类型转换,比如把其中一个算子转换为float或者numeric
[local:/data/pg12]:5432 pg12@testdb=# select 1/2::float; ?column? ---------- 0.5(1 row)[local:/data/pg12]:5432 pg12@testdb=# select 1/2::numeric; ?column? ------------------------ 0.50000000000000000000(1 row)[local:/data/pg12]:5432 pg12@testdb=#
被0除错误
如除数为0时,会报"ERROR: division by zero"错误,为免出现这种错误,可使用nullif判断除数是否为0,如为0则返回null
[local:/data/pg12]:5432 pg12@testdb=# select 1/0;ERROR: division by zero[local:/data/pg12]:5432 pg12@testdb=# select 1/nullif(0,0); ?column? ----------(1 row)[local:/data/pg12]:5432 pg12@testdb=# select 1/nullif(0,0) is null; ?column? ---------- t(1 row)[local:/data/pg12]:5432 pg12@testdb=#
统计NULL值问题
如使用count(column)时,column的值如为null则不会统计到结果中,使用count(*)则会统计。
[local:/data/pg12]:5432 pg12@testdb=# create table t_count(id int);CREATE TABLE[local:/data/pg12]:5432 pg12@testdb=# insert into t_count select generate_series(1,1000);INSERT 0 1000[local:/data/pg12]:5432 pg12@testdb=# insert into t_count select null from generate_series(1,1000);INSERT 0 1000[local:/data/pg12]:5432 pg12@testdb=# select count(*) from t_count; count ------- 2000(1 row)[local:/data/pg12]:5432 pg12@testdb=# select count(id) from t_count; count ------- 1000(1 row)[local:/data/pg12]:5432 pg12@testdb=#
参考资料
https://hakibenita.com/sql-dos-and-donts
结果
整数
错误
除法
统计
之间
除数
运算
参考资料
实数
实际
实际上
小数
小数位
操作符
点数
算子
类型
细节
资料
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
珠海app软件开发哪里好
网络安全视频观后感100
上蔡网络安全宣传
深圳鑫明网络技术有限公司
上海艾悠悠网络技术有限公司
国家网络安全大楼图片
自定义数据库模型的设计
数据库计算机证书查询
数据库搭建多少台集群
哈尔滨喜来网络技术有限公司
网络安全用得到抓包技术吗
数据库的er关系
本届互联网之光博览会上的黑科技
mc服务器需要高读写硬盘吗
选购网络服务器遵循哪些原则
四川工程软件开发费用
学计算机网络技术需要 英语
网络安全有哪些影响
软件开发企业账务处理
职业计划软件开发
网络安全 英雄
战地五无限弹药服务器
文明上网网络安全黑板报图片
网络技术已经成为
连云港花果山服务器
网络安全系统测试方案
蚌埠软件开发培训哪家专业
数据库表怎么插入记录
按照姓名汇总数据库
商丘网络安全工程师证书