PostgreSQL DBA(136) - Develop(Common Mistakes)
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本节简单介绍了在PostgreSQL中容易出错但又容易被忽略的细节。除法运算在整数和整数之间执行除法运算时,结果会是整数,但实际上我们希望保留小数位。[local:/data/pg12]:5432 p
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
湖北奇爱软件开发有限公司
工业数据软件开发商
我的世界为什么连接不上服务器了
不可以检索报纸资料的数据库
分布式数据库解决方案
服务器产量
科技互联网书籍
服务器屏蔽ip是怎么回事
义乌市云图网络技术
杭州首淘网络技术有限公司
我的世界服务器插件怎么用
苍南现代化刀片服务器售后保障
江苏买哪里的服务器
数据库坏了能修吗
c语言 客户端服务器
宁波奉化区监控存储服务器
华为数通通用软件开发怎么样
农行软件开发中心咋样
h2数据库大小写不敏感
全球最大中医药数据库
数据库产品年终回顾
软件开发宣传部职责
联系信息数据库
河南语音网络技术
关于中国网络安全的国家措施
上海仓库物料管理软件开发企业
简述数据库安全措施
健康网络安全手抄报
数据库查询结果不正确是什么情况
收款方支付宝中国网络技术是