一、数值类型对比
数据类型 | 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 按数据库时区转换。