一、去O数据库选择PostgreSQL
PostgreSQL官网: https://www.postgresql/
PostgreSQL教程: https://www.runoob/postgresql/postgresql-tutorial.html
菜鸟教程 https://www.w3cschool/qysrc/qysrc-jwxg3758.html
W3Cschool
通用数据库工具:dbeaver https://dbeaver.io/
二、SpringMVC+MyBatis整合PostgreSQL
在xxx-svc模块的pom.xml添加postgresql依赖
<!-- https://mvnrepository/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.2</version>
</dependency>
三、修改app.properties中jdbc配置文件
修改数据库链接配置
<!--修改数据库链接配置-->
#数据库类型
jdbc.dbType=postgresql
#数据库驱动
jdbc.driverClassName=org.postgresql.Driver
#数据库地址
jdbc.url=jdbc:postgresql://11.xxx.xx.xxxx:5432/xxxx(调整为各自的数据库服务名)
jdbc.urlo=jdbc:postgresql://11.xxx.xx.xxx:5432/xxxx
#账户信息
jdbc.username=xxxxx
jdbc.password=xxxxxxx
四、修改configuration.xml中数据库方言处理方式
<plugins>
<plugin interceptor="com.paasmon.mybatis.OffsetLimitInterceptor">
<property name="1" value="com.paasmon.mybatis.dialect.PostgreSQLDialect"/>
</plugin>
</plugins>
五、PostgreSQL 时间/日期函数和操作符
https://www.runoob/postgresql/postgresql-datetime.html
六、PostgreSQL 常用函数
https://www.runoob/postgresql/postgresql-functions.html
七、PostgreSQL与Oracle基本数据类型差异
Oracle | PostgreSQL |
---|---|
Varchar2 | varchar |
number | numeric |
date | timestamp/date/time |
不支持boolean,可通过0/1代替 | 支持boolean |
null | null |
特别说明
number(0,0) 等同于 numeric(0,0)
八、PostgreSQL与Oracle的DDL语法差异
Oracle和PostgreSQL操作表结构语法基本一致,只有更改列的数据类型写法有些差异
**Oracle:**ALTER TABLE table_name modify column_name datatype;
PostgreSQL:ALTER TABLE table_name ALTER column_name TYPE datatype;
九、PostgreSQL与Oracle的DML语法差异
oracle和pgSQL增删改查语法基本一致,只有upsert有差异
**Oracle:**有自带的merge into功能
PostgreSQL:不支持merge操作,可以使用on conflict() do
十、PostgreSQL与Oracle的查询语句差异
1、查询表中最新n条数据
Oracle有rownum,PostgreSQL有limit
Oracle:
写法一:select t._ from (select _ from nwd.tc_inte_bid_record order by create_time desc) t where rownum <= n;
写法二:select _ from(select t._, row_number() over(order by create_time desc) rn from nwd.tc_inte_bid_record t) where rn <=n;
postgreSQL:
select * from abc.xxx order by create_time desc limit n;
注意:limit必须用于 order by 之后
2、子查询
postgresql子查询要求比较严格,必须具有别名才可以
十一、PostgreSQL与Oracle对应的函数
Oracle | PostgreSQL | 备注 |
---|---|---|
nvl | COALESCE | COALESCE函数是返回参数中的第一个非null的值,它要求参数中至少有一个是非null的,如果参数都是null会报错 |
trunc | date_trunc | 截断成指定的精度 |
sysdate | current_date、current_time、current_timestamp | |
dual表 | 没有dual表 | 可以直接select 1、select user、select xxx |
where rownum < … | select * from persons limit A offset B; | A就是需要多少行;B就是查询的起点位置。A、B是bigint类型的值 |
to_number(int) | to_number(int, text) | 例: to_number(123, “666666”) : text表示精度 |
to_char(int) | to_char(int, text) | 例如 to_char(123,“666666”) : text表示精度 |
to_date(text) | to_date(text, text) | |
cast | cast | |
DECODE | 无 | 使用CASE……WHEN……ELSE ……END |
instr(‘str1’,‘str2’) | strpos(‘str1’,‘str2’) | |
ROWNUM | 无 | 1.限制结果集数量,用于翻页等: |
SELECT * FROM T LIMIT 5 OFFSET 0 | ||
2.生成行号: | ROW_NUMBER() OVER() | |
xmlagg(xmlparse(content (表字段) || ‘,’ wellformed )).getclobval () | string_agg(表字段,‘,’)(参考:https://wwwblogs/lurenjia1994/p/9535899.html) | 行转列:处理字段合并 |
十二、PostgreSQL使用注意事项
1、SUM函数
sum函数不能统计String、Char类型的数字或者金额,需要使用cast转换格式,建议转换成decimal,例如:
select sum(cast(mrri.amount as decimal)) from mm_po_item mrri;
或者
select sum(mrri.amount::decimal) from mm_po_item mrri;
2、子查询
PostGreSQL的子查询相比较Oracle而言更严格,必须使用别名
3、分页
PostGreSQL数据分页是利用limit关键字 的,搭配子查询,Limit放在order by后面
更多推荐
Oracle转Postgresql
发布评论