一、去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基本数据类型差异

OraclePostgreSQL
Varchar2varchar
numbernumeric
datetimestamp/date/time
不支持boolean,可通过0/1代替支持boolean
nullnull

特别说明

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对应的函数

OraclePostgreSQL备注
nvlCOALESCECOALESCE函数是返回参数中的第一个非null的值,它要求参数中至少有一个是非null的,如果参数都是null会报错
truncdate_trunc截断成指定的精度
sysdatecurrent_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)
castcast
DECODE使用CASE……WHEN……ELSE ……END
instr(‘str1’,‘str2’)strpos(‘str1’,‘str2’)
ROWNUM1.限制结果集数量,用于翻页等:
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