PostgreSQL DBA(136) - Develop(Common Mistakes)
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本节简单介绍了在PostgreSQL中容易出错但又容易被忽略的细节。除法运算在整数和整数之间执行除法运算时,结果会是整数,但实际上我们希望保留小数位。[local:/data/pg12]:5432 p
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
中智农互联网科技
互联网与科技发展
互联网最新的科技有限公司
麻工互联网科技
互联网科技上市公司
有木互联网科技
万达互联网科技
互联网养老 桔豆科技
科技伦理 互联网公司
山东吉时兔互联网科技有限公司
玖二柒互联网科技公司待遇
广州慧亚互联网科技怎么样
互联网科技有哪些公司
中国科技创新与世界互联网大会
中国互联网公司排名锤子科技
烟台灵鸽互联网科技有限公司
21世纪互联网科技成就
2021世界互联网领先科技成果发布
北京瑞云互联网科技有限公司
互联网科技快速发展优美句子
有格互联网科技
工业互联网科技新基建
万易互联网科技
远拓互联网科技
广州恒生互联网科技有限
福建科技产业互联网发展
江苏互联网智能科技软件
陕西云淼互联网科技公司
广州梦谷互联网科技有限公司领导
科技和互联网行业的特点