JDBC连接:

Oracle的jdbc连接字符串:db.url=jdbc:oracle:thin:@192.168.1.1:1521:ORCL

Postgresql的连接字符串:db.url=jdbc:postgresql:@192.168.1.1:5432/database

1、基本数据类型差异

Oracle

PostgreSQL

Varchar2

varchar

number

numeric

date

timestamp/date/time

不支持boolean,可通过0/1代替

支持boolean

null

null

2、基本函数差异

item

Oracle

PostgreSQL

系统当前时间

SYSDATE

now()/CURRENT_TIMESTAMP/CURRENT_DATE/CURRENT_TIME

对时间或数字截取

trunc()

date_trunc()

to_char,to_number,

to_date

自动格式转换

需指定日期格式

eg:to_date(timejoin,'yyyy-MM-dd')

判空操作

nvl()

coalesce()

条件判断

decode()

case...when...then

dual伪表

支持

不支持(查询常量不需要加from)

其他用法一致的常用函数:

mod(n2,n1) -- n2除n1取余数;          sign(n) -- 判断n的符号;

floor(n) -- 取小于等于n的正整数;     ceil() -- 取大于等于n的正整数;

round(n,integer) -- 对n四舍五入,保留位数为integer;   trunc(n,integer) -- 对n截取,截取保留的位数为integer;

covert(char,dest_sest,source_set) -- 字符集转换,例:convert(username, 'ZHS16GBK','UTF8');

cast(expr as type_name) -- 数据类型转换,常用于数字与字符间转换,例:cast(id_no as varchar);

部分函数的使用简析:

(1)coalesce(COL1,COL2,COL3):返回参数中第一个非null字段值

例如:coalesce(COL1,0):如果COL1为null或‘’,则返回默认值0;否则返回COL1的值;

(2)extract(date):对日期特定部分提取(oracle和postgresql使用一致)

例如:extract(year from now());>>>2018

extract(month from now());>>>9

extract(month from timestamp '2018-09-10 13:59:59');>>>9

(3)对时间截取trunc()和date_trunc()

>>oracle--trunc()的用法:

trunc(sysdate,'yyyy');//返回当前年的第一天>>>2018-01-01

trunc(sysdate, 'mm');//返回当前月的第一天>>>2018-09-01

trunc(sysdate, 'dd');//返回当前时间的年月日>>>2018-09-14

trunc(sysdate, 'hh');//返回当前小时>>>2018-09-14 13:30:50

>>postgreSQL--date_trunc()用法:

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

(3)条件判断

Oracle:

Select DECODE (payments_info,'CR','Credit','DB','Debit', null) FROM dual;

PostgreSQL:

Select CASE

WHEN foo = 'CR'   THEN 'Credit'

WHEN foo = 'DB'   THEN 'Debit'

ELSE 'default'

END

FROM t2;

3、DDL语法差异

oracle和pgSQL操作表结构语法基本一致:

修改表名:alter table tbl_user rename tbl_user2;

添加约束:alter table 表名 add constraint 表名_列名_nn check (is not null)

添加列:alter table tbl_user add age number(3) default 18 not null;

alter table tbl_user add age number(3) default 18 not null after sex;(在指定列后添加列)

删除列:alter table tbl_user drop column age;

修改列:alter table tbl_user modify password default'000000' not null;(修改约束)

修改列名:alter table tbl_user rename column password to pwd;

只有更改列的数据类型写法有些差异

Oracle:ALTER TABLE table_name modify column_name datatype;

PostgreSQL:ALTER TABLE table_name ALTER column_name TYPE datatype;

4、DML语法差异

oracle和pgSQL增删改查语法基本一致,只有upsert有差异

Oracle:有自带的merge into功能(一个强大的操作)

PostgreSQL:不支持merge操作,可以使用on conflict() do

例:insert into TargetTable

select id,desc

from SourceTable

on conflict (id)

do update set

desc = exclude.desc

5、查询语句差异

(1)查询表中最新n条数据(Oracle有rownum,postgreSQL有limit)

postgreSQL:

select * from olc.olc_member_intebid_info order by create_time desc limit n;

注意:limit必须用于 order by 之后

Oracle:

写法一:select t.* from (select * from nwd.tc_inte_bid_record order by create_time desc) t whererownum <= n;

写法二:select * from(select t.*, row_number() over(order by create_time desc) rn from nwd.tc_inte_bid_record t) where rn <=n;

上述写法一为通用常规写法;写法二可以对分组后数据排序,分组语句写在over()中

(2)子查询

postgresql子查询要求比较严格,必须具有别名才可以

6、 Postgresql命令行常用操作(psql)

psql -d dbname -U username -p 5210 -h 172.0.0.1

--password 's&cws123'

如果不想输入密码,可以在.pgpass隐藏文件中添加密码,格式:

172.0.0.1:5210:dbname:username:password

注意.pgpass的权限问题:chmod 0600 ~/.pgpass

-- 查询某个库下的所有表(\dt)

select * from pg_tables where schemaname = 'idn_dw';

-- 查询某个存储过程(\df)

select proname,prosrc from pg_proc where proname = 'func_dwd_customer_info';

-- 查询某个表下的字段(\d tablen_ame)

select table_schema,table_name,t.colname,string_agg(column_name,',') as COLS

from information_schema.columns

LEFT JOIN (select pg_class.relname as tablename,pg_attribute.attname as colname from

pg_constraint inner join pg_class

on pg_constraint.conrelid = pg_class.oid

inner join pg_attribute on pg_attribute.attrelid = pg_class.oid

and pg_attribute.attnum = pg_constraint.conkey[1]

where pg_constraint.contype='p') t

on table_name=t.tablename

where TABLE_NAME = 's10_anfd_rule'

group by table_schema,table_name,t.colname;

pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结相关推荐

  1. Oracle业务适合用PostgreSQL去O的一些评判标准

    标签 PostgreSQL , Oracle 背景 Oracle业务适合用PG去O的一些评判标准: 功能指标 如果评估出来的业务中具备这些特性,非常适合使用PostgreSQL. 1.业务使用的数据类 ...

  2. 开源数据同步备份工具(MySQL、Oracle、SqlServer、PostgreSQL)

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 今天说的是一个开源数据同步备份工具,他支持mysql.oracle.kafka.PostgreSQL.sqlserver等 二.实现功能 数据同步与 ...

  3. Oracle 实时复制到 PostgreSQL或EnterpriseDB

    Oracle GoldenGate支持种类繁多的数据库的同步,功能非常强大. 从mysql, oracle同步到PostgreSQL的又一利器. 开源的从mysql,oracle同步到PostgreS ...

  4. SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)

    系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...

  5. pg、mysql、oracle子查询兼容性对比

    背景: 今天在查看mysql数据库一条语句的执行计划时,提示子查询需要加别名,于是对pg.oracle都做了一个测试,对比一下三种数据库的区别. 数据库版本: pg11.6.mysql5.7.29.o ...

  6. oracle internal_function,Oracle Internal Research内部原理研究

    Database Replay是11g中很酷的特性,对于workload capture的内部工作原理大家理解的不多,这里就介绍一下. 对于Workload Capture需要考虑的因素: 负载捕获文 ...

  7. Linux下docker安装配置oracle,oracle创建用户并远程连接,实测可用!

    最近在给同学弄毕业设计的数据库,因为oracle在个人电脑上极不稳定,所以他的电脑数据库崩溃了,这时候我就在docker上为他拉了一个oracle,解决了问题. docker的安装共有以下几步,实测没 ...

  8. oracle自动化,Oracle 自动化备份脚本

    备份脚本,基于linux,windows环境需要适当修改. 主脚本,会调用2,3步骤的rman.sql&status.sql $ more main.sh #set env ######### ...

  9. it oracle 培训,Oracle数据库技术培训_OracleDBA数据库工程师_Oracle数据库在线学习视频教程_IT职业培训-51CTO学院_精培学院...

    第一阶段:企业级Oracle数据库实战入门与集群实施 特色:本阶段部分内容为OCP/OCM课程内容,以企业实战项目为主导讲解,实用性更强. 第1章 Oracle数据库高级工程师职业发展与学习方法 第2 ...

最新文章

  1. Javascript面向对象编程(二):构造函数的继承
  2. 【转载】优酷网首席执行官兼创始人古永锵演讲
  3. OpenEjb使用笔记--让Tomcat可以部署EJB
  4. .net aspose.words 域加载图片_使用Python批量替换csdn文章的图片链接
  5. vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...
  6. 如何通过自动增加索引,实现数据库查询耗时降低50%?
  7. 51Nod——1004 n^n的末位数字
  8. android和java中常见 Exception
  9. matplotlib条形图
  10. java 水仙花数问题(java50道经典编程题)
  11. Chrome保存整个网页为图片、PDF
  12. python进程和线程大全
  13. 腾讯云人脸识别 报错 Entry name ‘assets/detector/wb_net_2_bin.rpnproto‘ collided
  14. 【分布式计算】什么是分布式系统
  15. A hard puzzle(HDU1097)(快速幂取模)
  16. Candy -- LeetCode
  17. asp.net1025-物流信息管理系统#毕业设计
  18. SSM整合+视频网站开发
  19. 【Nginx】Nginx文件服务器搭建
  20. emacs 五笔输入法

热门文章

  1. 数据库连接池原理及常用连接池介绍
  2. Codeforces Round #646 (Div. 2) E(贪心,bfs)
  3. Xor Transformation
  4. [2020.11.25NOIP模拟赛]下棋【dp】
  5. P4310-绝世好题【位运算,dp】
  6. 牛客-仓鼠的石子游戏【博弈论】
  7. jzoj4805-[NOIP2016提高A组模拟9.28]跟踪【dfs,树】
  8. jzoj4742-单峰【数学,数论】
  9. 【2018.3.17】模拟赛之二-ssl1862jzoj1366 删数【区间dp】
  10. 【贪心】数据备份(P6320)