一、数值类型对比
数据类型 | Oracle | PostgreSQL | 说明 |
---|---|---|---|
整数 | NUMBER(p,0) | SMALLINT /INT /BIGINT | Oracle 统一用 NUMBER ,PG 区分精度范围 |
浮点数 | BINARY_FLOAT | REAL | 单精度浮点 |
双精度浮点 | BINARY_DOUBLE | DOUBLE PRECISION | 双精度浮点 |
高精度小数 | NUMBER(p,s) | NUMERIC(p,s) | 精确数值存储 |
自增序列 | SEQUENCE + TRIGGER | SERIAL /BIGSERIAL | PG 内置自增类型 |
二、字符串类型对比
数据类型 | Oracle | PostgreSQL | 说明 |
---|---|---|---|
定长字符串 | CHAR(n) | CHAR(n) | 固定长度 |
变长字符串 | VARCHAR2(n) | VARCHAR(n) | Oracle 允许省略 FROM ,PG 必须写 FROM |
大文本 | CLOB | TEXT | 无长度限制 |
二进制数据 | BLOB /RAW | BYTEA | 二进制存储 |
三、日期时间类型对比
数据类型 | Oracle | PostgreSQL | 关键差异 |
---|---|---|---|
日期+时间 | DATE | TIMESTAMP(0) | Oracle 的 DATE 包含时间(到秒),PG 的 DATE 仅日期 |
高精度时间戳 | TIMESTAMP | TIMESTAMP | 均支持纳秒级精度 |
带时区时间戳 | TIMESTAMP WITH TIME ZONE | TIMESTAMPTZ | 时区处理逻辑相同 |
本地时区时间戳 | TIMESTAMP WITH LOCAL TIME ZONE | 无直接等价,需转换 | Oracle 特有类型 |
时间间隔 | INTERVAL DAY TO SECOND | INTERVAL | 功能类似 |
四、其他类型
类型 | Oracle | PostgreSQL | 说明 |
---|---|---|---|
布尔值 | 无原生类型 | BOOLEAN | PG 支持原生布尔 |
行标识符 | ROWID | OID | 物理行地址标识 |
JSON | JSON (12c+) | JSON /JSONB | PG 的 JSONB 支持二进制存储和索引 |
五、使用注意事项
-
类型转换
- Oracle 的
NUMBER(10)
建议转为 PG 的INT
,而非NUMERIC
。 - Oracle 的
VARCHAR2
迁移时直接映射为 PG 的VARCHAR
。
- Oracle 的
-
语法差异
- PG 的子查询必须有别名,Oracle 可不写。
- 分页查询:Oracle 用
ROWNUM
,PG 用LIMIT/OFFSET
。
-
时区处理
- 带时区类型存储时,两者均转换为 UTC,但检索时 PG 按会话时区转换,Oracle 按数据库时区转换。