一、數值類型對比
數據類型 | 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 按數據庫時區轉換。