Postgresql与Oracle区别
一、数据类型转换和常用函数替换方案
(1)数据类型转换 ora --> pgsql
- CHAR(n) --> CHAR(n)
- VARCHAR2(n) --> varchar(n)
- NUMBER(n, m) --> NUMERIC(n, m)
- NUMBER(4) --> SMALLINT
- NUMBER(9) --> INT
- NUMBER(18) --> BIGINT
- NUMBER(n) --> NUMERIC(n) --如果n大于19,则可以转换为numeric类型
- DATE --> TIMESTAMP(0)
- CLOB --> TEXT
- BLOB --> BYTEA
- TIMESTAMP WITH LOCAL TIME ZONE ------>TIMESTAMPTZ
注意:个人认为Oracle中number对应为float8(double),是浮点数,不精确,主要是oralce的number可以存小数。像费用等应该使用numeric指定精度。
(2)子查询
Postgresql中子查询较为规范,子查询必须要取别名
select * from (select * from test) t; --正确写法
select * from (select * from test); --报错:subquery in from must have an alias
(3)虚表dual问题
Postgresql中没有 dual 虚拟表,为保证兼容性,需创建伪视图(view)代替:
create or replace view dual as
select NULL::"unknown" where 1=1;
(4)sysdate替换方案
- sysdate --> now()
- trunc(sysdate) --> now()::date
- sysdate - ? --> now() - (? || 'day')::interval
(5)NVL函数替换方案
- coalesce(arg1, arg2, arg3...)
(6)rownum替换方案
- rownum < 5 改为 limit 5
(7)guid替换方案
sysguid() --> gen_random_uuid()

浙公网安备 33010602011771号