postgresql常见开发技巧
1.数据类型
名字 | 描述 |
---|---|
bigint | 有符号 8 字节整数 |
bigserial | 自增八字节整数 |
bit [ (n) ] | 定长位串 |
bit varying [ (n) ] | 变长位串 |
boolean | 逻辑布尔量 (真/假) |
box | 平面中的长方形 |
bytea | 二进制数据(“字节数组”) |
character varying [ (n) ] | 变长字符串 |
character [ (n) ] | 定长字符串 |
cidr | IPv4 或者 IPv6 网络地址 |
circle | 平面中的圆 |
date | 日历日期(年,月,日) |
double precision | 双精度浮点数字 |
inet | IPv4 或者 IPv6 网络地址 |
integer | 四字节长有符号整数 |
interval [ § ] | 时间间隔 |
line | 平面中的无限长直线 |
lseg | 平面中的线段 |
macaddr | MAC 地址 |
numeric [ (p, s) ] | 可选精度的准确数字 |
path | 平面中的几何路径 |
point | 平面中的点 |
polygon | 平面中的封闭几何路径 |
real | 单精度浮点数 |
smallint | 有符号两字节整数 |
serial | 自增四字节整数 |
text | 变长字符串 |
time [ § ] [ without time zone ] | 一天里的时间 |
time [ § ] with time zone | 一天里的时间,包括时区 |
timestamp [ § ] [ without time zone ] | 日期和时间 |
timestamp [ § ] with time zone | 日期和时间 |
tsquery | 全文检索查询 |
tsvector | 全文检索文档 |
txid_snapshot | 用户级别事务ID快照 |
uuid | 通用唯一标识符 |
xml | XML数据 |
- 与oracle对比差异
Oracle | PostgreSQL |
---|---|
Varchar2 | varchar |
number | numeric |
date | timestamp/date/time |
不支持boolean,可通过0/1代替 | 支持boolean |
null | null |
- 填充测试数据
create table "test".EMP
(
empno numeric(4) not null,
ename VARCHAR(10),
job VARCHAR(9),
mgr numeric(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno numeric(2)
);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800.00, null, 20);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600.00, 300.00, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250.00, 500.00, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975.00, null, 20);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250.00, 1400.00, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850.00, null, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450.00, null, 10);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000.00, null, 20);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000.00, null, 10);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500.00, 0.00, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100.00, null, 20);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950.00, null, 30);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000.00, null, 20);
insert into "test".emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300.00, null, 10);
2.coalesce函数
进行空值处理,类似oracle中nvl函数
select empno, ename, coalesce(comm,0) from "test".emp
3.string_agg
字符串聚合,类似oracle中list_agg
Select deptno,string_agg(ename,’,’) fromemp group by deptno;
4.case…when…end
pg中没有decode函数只能用case…when代替,差评!
select ename, (case job when 'PRESIDENT' then '总裁' else '打工仔' end) as "职位" from "test".emp
5.JDBC
Oracle的jdbc连接字符串:jdbc:oracle:thin:@192.168.1.1:1521:ORCL
Postgresql的连接字符串:jdbc:postgresql:@192.168.1.1:5432/database
6.SQL语法
6.1 子查询必须要别名
改写后:
select * from (select * from "test".emp where deptno=20) as t
6.2 生成rownum
pg中没有rownum伪列,使用row_number()
select empno, row_number() OVER (ORDER BY empno) as "rownum" from "test".emp;
7.数字和字符串格式化
SELECT to_char(12345, '9999999999999999999')//结果' 12345',结果字符串前面有空格,位数跟格式化模式中9的位数有关;
SELECT to_char(12345, '99999')//结果'12345'
SELECT to_char(12345, '9999')//结果‘####’,当模式串小于数字个数时,字符串会显示为#,位数跟 格式化模式中9的位数有关;
SELECT to_char(12345, '')//结果''
SELECT to_number('12345', '9999999999999999999')//12345
SELECT to_number('12345', '99999')//12345
SELECT to_number(''||12345, '9999')//1234,由于模式是4位,结果忽略最后一位;
SELECT to_number(' 12345', '9999999999999999999')//12345
SELECT to_number(' ab ,1,2a3,4b5', '9999999999999999999')//12345,会忽略所有字符串中非数字字符
select to_number('12,454.8-', '99G999D9S')
或者:
–把’1234’转成整数
select cast(‘1234’ as integer) ;
select cast(‘1234’ as int) ;
8.日期时间格式化
*函数* | *返回类型* | *描述* | *例子* |
---|---|---|---|
to_char(timestamp, text) | text | 把时间戳转换成字串 | to_char(current_timestamp, ‘HH12:MI:SS’) |
to_char(interval, text) | text | 把时间间隔转为字串 | to_char(interval ‘15h 2m 12s’, ‘HH24:MI:SS’) |
to_char(int, text) | text | 把整数转换成字串 | to_char(125, ‘999’) |
to_char(double precision, text) | text | 把实数/双精度数转换成字串 | to_char(125.8::real, ‘999D9’) |
to_char(numeric, text) | text | 把numeric转换成字串 | to_char(-125.8, ‘999D99S’) |
to_date(text, text) | date | 把字串转换成日期 | to_date(‘05 Dec 2000’, ‘DD Mon YYYY’) |
to_timestamp(text, text) | timestamp | 把字串转换成时间戳 | to_timestamp(‘05 Dec 2000’, ‘DD Mon YYYY’) |
to_timestamp(double) | timestamp | 把UNIX纪元转换成时间戳 | to_timestamp(200120400) |
to_number(text, text) | numeric | 把字串转换成numeric | to_number(‘12,454.8-’, ‘99G999D9S’) |
select to_timestamp('2012-05-01 23:58:59','yyyy-mm-dd hh24:mi:ss')
date_trunc(‘year’,now());//返回当前时间年的第一天>>>2018-01-01 00:00:00
date_trunc(‘month’,now());//返回当前月的第一天>>2018-09-01 00:00:00
date_trunc(‘day’,now()); //返回当前时间的年月日>>2018-09-14 00:00:00
date_trunc(‘second’,now()); //返回当前时间的年月日时分秒>>2018-09-14 13:30:50
postgresql常见开发技巧的更多相关文章
- thinkphp开发技巧经验分享
thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...
- iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
- 新年之际,盘点一些APP开发技巧
(原文:Reader Submissions - New Year's 2015 作者:Mattt Thompson 译者:培子 校对:蓝魂) 回顾过去一年发生在我们身边的事情时,有一点不得不提:对苹 ...
- 【转】几点 iOS 开发技巧
[译] 几点 iOS 开发技巧 原文:iOS Programming Architecture and Design Guidelines 原文来自破船的分享 原文作者是开发界中知晓度相当高的 Mug ...
- Angular开发技巧
由于之前有幸去参加了ngChina2018开发者大会,听了will保哥分享了Angular开发技巧,自己接触Angular也有差不多快一年的时间了,所以打算对Angular开发中的一些技巧做一个整理 ...
- Tornado开发技巧,简单了解tornado
tornado基础入门(一)——简单了解tornado 参考:http://demo.pythoner.com/itt2zh/ch1.html tornado是一个轻量级的web框架,是一个用pyth ...
- 13 个 NPM 快速开发技巧
摘要: 玩转npm. 作者:前端小智 原文:13 个 npm 快速开发技巧 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 每天,数以百万计的开发人员使用 n ...
- 5-MySQL DBA笔记-开发技巧
第5章 开发技巧 本章将介绍一些和数据库相关的开发技巧.由于开发领域很广,这里只选取部分比较常见的小技巧.5.1 存储树形数据 有时我们需要保存一些树形的数据结构,比如组织架构.话题讨论.知识管理.商 ...
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇
本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 中级篇
本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与Mat ...
随机推荐
- 凡是有但是-varchar和nvarchar的初步学习之一
凡是有但是-varchar和nvarchar的初步学习之一 背景 高应用开发, 在涉及到国内国外的问题时,重要的事情有两个: 时区转换, 字符集转换. 时区转换虽然是很难理清楚, 各种规范不统一的事情 ...
- [转帖]Kafka 核心技术与实战学习笔记(七)kafka集群参数配置(上)
一.Broker 端参数 Broke存储信息配置 log.dirs:非常重要,指定Broker需要使用的若干文件目录路径,没有默认值必须亲自指定. log.dir:他只能表示单个路径,补充上一个参数用 ...
- [转帖]煮饺子与 docker、kubernetes 之间的关系
前言:云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单 ...
- [转帖]深度解读:传奇的Alpha处理器
https://jishuin.proginn.com/p/763bfbd2cf85 来源:科技新报(台) 长期关心处理器技术发展者,这20年来,很难不每隔一段时间就会偶尔听到「这技术受Alpha影响 ...
- 【转贴】西数全新推出企业级金盘SSD:2.5寸U.2接口、最大7.68TB、96层TLC
西数全新推出企业级金盘SSD:2.5寸U.2接口.最大7.68TB.96层TLC https://www.cnbeta.com/articles/tech/951353.htm 硬件发展日新月异 &q ...
- 使用Docker快速搭建InnoDB Cluster集群的过程
感谢 感谢方神的大力帮助,自己对数据库基本一窍不通.只是照葫芦画瓢做出来的. 感谢来自如下两个网站的资料,我进行了一定程度的融合. https://blog.csdn.net/weixin_43972 ...
- locust+python性能测试库
一.简介 locust官网介绍:Locust 是一个用于 HTTP 和其他协议的开源性能/负载测试工具.其对开发人员友好的方法允许您在常规 Python 代码中定义测试.Locust测试可以从命令行运 ...
- vue3新特性
值得注意的新特性 1==> 组合式 API 2==> Teleport 3==> 片段 4==> 触发组件选项 5==> createRenderer API 来自 @v ...
- TypeScript枚举类型
枚举 简单理解就是将所有的情况列举出来. 枚举不是用来定义类型的哈.就是说枚举不是一种数据类型. enum xxx={ key1=value1, key2=value2, } 通过 xxx.key1的 ...
- 【VictoriaMetrics的vmbackupmanager】这个一年卖 2 万美元的功能,我做出来了
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 1.背景 在可观测领域的 metrics 解决方案中,Vi ...