PostgreSQL 与 Oracle 数据库字段类型的详细对比

一、数值类型对比

数据类型 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 支持二进制存储和索引

五、使用注意事项

  1. 类型转换

    • Oracle 的 NUMBER(10) 建议转为 PG 的 INT,而非 NUMERIC
    • Oracle 的 VARCHAR2 迁移时直接映射为 PG 的 VARCHAR
  2. 语法差异

    • PG 的子查询必须有别名,Oracle 可不写。
    • 分页查询:Oracle 用 ROWNUM,PG 用 LIMIT/OFFSET
  3. 时区处理

    • 带时区类型存储时,两者均转换为 UTC,但检索时 PG 按会话时区转换,Oracle 按数据库时区转换。
相关推荐
林开落L5 小时前
Linux 进程信号:从进阶特性到实战应用(下)
linux·运维·服务器·进程信号
初听于你6 小时前
缓存技术揭秘
java·运维·服务器·开发语言·spring·缓存
程序猿阿伟8 小时前
《重构工业运维链路:三大AI工具让设备故障“秒定位、少误判”》
运维·人工智能·重构
蜀山雪松8 小时前
全网首先 Docker Compose 启动Postgresql18
运维·docker·容器
Turboex邮件分享8 小时前
Syslog日志集成搭建
运维·elasticsearch·集成测试
YongCheng_Liang9 小时前
网络工程师笔记8-OSPF协议
运维·网络·网络协议
河南博为智能科技有限公司9 小时前
动力环境监控主机-全方位一体化监控解决方案
运维·服务器·人工智能·物联网·边缘计算
vxtkjzxt88810 小时前
自动化脚本的自动化执行实践
运维·自动化
漫谈网络10 小时前
什么是RDMA?—— 一场网络通信的范式革命
运维·服务器·网络
tt666qq11 小时前
linux文件系统学习
linux·运维·学习