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 按数据库时区转换。
相关推荐
为思念酝酿的痛7 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪8 小时前
什么是docker
运维·docker·容器
人还是要有梦想的9 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通9 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops9 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush49 小时前
嵌入式linux学习记录二
linux·运维·学习
weixin_468466859 小时前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷10 小时前
Nginx自签名-图形化工具 XCA
运维·nginx
志栋智能12 小时前
小步快跑:从单一场景开启超自动化巡检之旅
运维·网络·人工智能·自动化
AugustRed12 小时前
Linux 运维常用命令大全(超全速查表)
运维·网络·php