Postgresql 与 Oracle 相关差异对比
通过查阅资料及实验,以下对比了 Postgresql 9.3 版本与 Oracle 11g版本的相关差异。注意:相关细节仍待考证和完善。
1. 基本语法差异
1.1. 基本数据类型差异
Varchar2 | varchar |
DATE | date/time/timestamp |
null | null |
clob | text |
blob | bytea |
number | smallint/integer/bigint/numeric/real/double precision |
不支持boolean,可通过0/1代替 | 支持 boolean |
1.2. 基本函数差异
字符串连接符 | || | concat() |
‘a’ || null = | ‘a’ | null |
trunc(时间) | trunc(date) | date_trunc() |
取当前系统时间 | SYSDATE | localtimestamp, now() |
to_char, to_number, to_date |
自动格式转换 | 需指定格式 |
decode | √ | × |
outer join | (+) | left(right) join |
GOTO | √ | × |
procedure | √ | × 需改写成function |
package | √ | × 需改写成function |
1.2.1. 游标属性
%FOUND | found |
%NOTFOUND | not found |
%ISOPEN | × |
%ROWCOUNT | × |
1.2.2. 系统内置函数包
DBMS_OUTPUT | × |
DBMS_SQL | × |
UTIL_FILE | × |
UTIL_MAIL | × |
1.3. DDL 差异
1.3.1. Sequence语法及使用差异
create | create sequence SEQ_TAB_NAME minvalue 1 maxvalue 9999999999999999 start with 1 increment by 1 cache 20; |
create sequence seq_tab_name minvalue 1 maxvalue 9223372036854775807 start 1 increment 1 cache 20; |
query | select seq_tab_name.nextval from dual; | select next_val(seq_tab_name) from dual; |
注意:pgsql中的 dual,需自主实现。详见兼容性设置->虚表dual问题 章节。
1.3.2. constraint 差异
constraint | alter table tab_name add constraint pk_tab_name primary key(column_id) using index; | alter table tab_name add constraint pk_tab_name primary key(column_id); |
2. 高级语法差异
2.1. 事务差异
Oracle 中,通过 commit/rollback来实现事务提交或回滚。结构类似于:
begin
select ...
update ...
delete ...
commit;
exception
when others then
rollback;
end;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
PostgreSQL 实际上把每个 SQL 语句当做在一个事务中执行来看待。 如果你没有发出BEGIN命令,那么每个独立的语句都被一个隐含的BEGIN 和(如果成功的话)COMMIT包围。一组包围在BEGIN和COMMIT 之间的语句有时候被称做事务块。
例如:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
-- 呀!加错钱了,应该用 Wally 的账号
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Wally';
COMMIT;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
在 PL/pgSQL中,也提供了类似于Oracle 的 Begin、End及ExceptionCode处理机制。他们之间的差异不明显。事实上,PL/SQL(Oracle数据库操作语言)与PL/pgSQL是高度相似的,这让procedure在Oracle与 Postgresql之间迁移变得极为便捷。
2.2. 函数继承与重载
Oracle不支持 继承和重载特性,pgsql支持继承和函数重载;
(待完善)
2.3. 类型转换
pgsql 中的类型转换 “::” 符,Oracle 不支持。
2.4. 子查询
子查询,pgsql要求更严格,必须具有别名才可以;
3. 其他差异
3.1. jdbc差异
Oracle的jdbc连接字符串:db.url=jdbc:oracle:thin:@192.168.1.1:1521:ORCL
Postgresql的连接字符串:db.url=jdbc:postgresql:@192.168.1.1:5432/database
4. 兼容性设置
4.1. 字符串连接兼容性解决方案
Postgresql中没有concat函数,且由于 ||无法使用,需要通过在public schema中创建concat函数来解决。
--在 public schema中创建 concat 函数
create or replace function concat(text, text) returns text as
$body$ select coalesce($1,'') || coalesce($2,'')$body$ language 'sql' volatile;
alter function concat(text, text) owner to postgres;
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
4.2. 虚表 dual 问题
Postgresql中没有 dual 虚拟表,为保证兼容性,需创建伪视图(view)代替:
create or replace view dual as
select NULL::"unknown"
where 1=1;
alter table dual owner to postgres;
grant all on table dual to postgres;
grant select on table dual to public;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.3. 数据分页问题
Oracle中没有 limit,postgresql中没有rownum。需重写相关语句。
-- Oracle
select * from (
select * from (
select * from t1 order by col1, col2
) where rownum <=50 order by col3, col4
) where rowmun <=20 order by col5, col6;
-- postgresql
select * from (select * from (select * from t1 order by col1, col2) ta order by col3, col4 limit 50) tb
order by col5, col6 limit 20;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
注意:limit必须用于 order by 之后!
相关推荐
4. PostgreSQL与Oracle的闪回技术对比 5. PostgreSQL与Oracle中逻辑备份工具的使用方法 6. PostgreSQL与Oracle中物理备份和恢复的流程和方法 7. Oracle闪回技术的概念及其应用 8. Oracle逻辑备份的模式和用户模式,...
- **Sqlserver**、**Oracle**、**MySql**、**PostgreSql** 和 **SqlLite** 都提供了丰富的内置函数支持,包括数学、日期时间、字符串处理等多方面功能。 #### 五、分页 分页是数据库中常见的需求之一,不同的...
**Oracle**和**PostgreSQL**在创建序列时的最大值设定和缓存机制有所差异: - **Oracle**: 最大值可以设置到非常大的数字,使用`MAXVALUE`参数,同时支持`CACHE`选项来提高性能,但不支持循环(`NOCYCLE`)。 - **...
在探讨《PostgreSQL与Oracle跟SQL92 Standard的差异》这一主题时,我们主要关注的是三种数据库管理系统在数据类型上的不同之处。这篇文章由许雅婷撰写,作为高等数据库作业的一部分,详细对比了PostgreSQL、Oracle...
在本篇文章中,我们将详细介绍 PostgreSQL 和 Oracle 的备份技术,包括逻辑备份、物理备份、闪回技术等,并对比两者的差异和优缺点。 逻辑备份技术 逻辑备份是指从数据库中提取结构和数据的备份,包括表定义、表...
Oracle的`ROUND()`函数用法相同,但结果可能有精度差异。 6. **e为底的幂**: SQLServer使用`EXP()`,如`SELECT EXP(1)`;Oracle同样使用`EXP()`,结果略有不同。 7. **取e为底的对数**: SQLServer使用`LOG()`...
标题中的“PostgreSQL 8.2, Oracle 10g, SQL Server 2005, MYSQL 5.1 脚本规范”涉及到的是四个不同的数据库管理系统(DBMS)的脚本编写标准和规范。这四个系统分别是PostgreSQL、Oracle、SQL Server和MySQL,它们都...
它不仅对PostgreSQL的性能优化策略进行了详尽的阐述,而且对于熟悉MySQL或Oracle的用户也具有很高的参考价值,因为这些数据库系统虽然在语法和实现上有差异,但其性能调优的基本原则是相通的。 **一、PostgreSQL...
它可能支持多种数据库系统,如MySQL、Oracle、SQL Server、PostgreSQL等,能快速找出结构上的差异。 对于源码级别的实现,这个工具可能使用编程语言如Java、Python或C#编写,依赖于JDBC、ODBC或其他数据库连接库来...
然而,PostgreSQL作为开源的关系型数据库管理系统,并没有原生支持与Oracle AWR类似的特性。但通过一些第三方工具和自定义脚本,可以在PostgreSQL中实现类似的功能。本篇文章将详细介绍如何在PostgreSQL中实现Oracle...
3. **性能比较与优化**:对比分析EnterpriseDB和Oracle在性能上的差异,提供性能调优的策略和技巧,包括查询优化、索引设计、内存管理等方面。 4. **安全与权限管理**:解释EnterpriseDB的安全模型,如何模拟Oracle...
#### 数据类型对比与建表语句 数据类型对比是移植过程中的关键环节之一,因为Oracle和Greenplum在数据类型的定义上存在差异。例如,Greenplum支持列存储和分布键(DK键),这些特性在构建表时需特别注意。当创建表时,...
本资料主要对比了四种广泛应用的数据库系统:Oracle、MySQL、SQL Server和PostgreSQL,包括它们的基本语法、数据类型、内置函数以及CRUD(创建、读取、更新、删除)操作、游标和存储过程的使用。 1. **Oracle数据库...
7. **优化与对比**:根据测试结果,可以对数据库配置进行优化,或者对比不同数据库系统的性能差异,为数据库选型提供数据支持。 综上所述,BenchmarkSQL 5.0是一个强大的数据库性能测试工具,通过其提供的JDBC驱动...
MySQL与其他关系型数据库管理系统(RDBMS)对比,如Oracle、SQL Server、PostgreSQL等。在多个方面存在差异,如开源性、性能、可扩展性、安全性、支持、多租户、数据库管理等。 与 Oracle 对比: 1. 开源性:...
本主题将深入探讨几种常见的数据库系统,包括MySQL、SQL Server、Oracle和PostgreSQL,以及它们各自的数据类型对比。 1. **MySQL数据类型**: MySQL提供了广泛的数据类型,如数值类型(整数、浮点数、定点数)、...
SQL数据库对比工具可能支持多种数据库管理系统,如MySQL、Oracle、SQL Server、PostgreSQL等,使得不同数据库间的迁移和协作变得轻松。 10. **易用性与用户体验**: 优秀的工具应具有直观的用户界面,使得即使是...
MySQL的核心部分100%由Sun/MySQL公司拥有,大多数MySQL开发者也为Sun公司工作,这和PostgreSQL由社区共同支持的情况形成鲜明对比。 在性能方面,两者均支持高并发的读写操作,但各自在特定场景下的性能表现和优化...
在"数据库安装差异1"中,可能涵盖了不同数据库系统的安装过程对比,例如Oracle、MySQL、SQL Server或PostgreSQL。这些系统的安装界面、默认设置、配置选项等都有所不同,理解这些差异有助于选择最适合的数据库系统并...
8. **兼容性**:优秀的数据库对比工具不仅要支持MySQL,还可能支持其他数据库系统,如Oracle、SQL Server、PostgreSQL等,以满足多样化的数据库环境需求。 总的来说,数据库对比工具在数据库管理和维护中扮演着不可...