PostgreSQL Oracle 兼容性系列之 - orafce

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
PostgreSQL是和Oracle最接近的企业数据库,包括数据类型,功能,架构和语法等几个方面。甚至大多数的日常应用的性能也不会输给Oracle。

但是Oracle有些函数或者包,默认PostgreSQL是没有的,需要安装orafce包来实现这些兼容性。
例如现在orafce已经包含了如下内容。

1. 类型 date, varchar2 and nvarchar2
2. 函数 concat, nvl, nvl2, lnnvl, decode, bitand, nanvl, sinh, cosh, tanh and oracle.substr
3. dual 表
4. package : 
        dbms_output
        utl_file
        dbms_pipe
        dbms_alert
        PLVdate
        PLVstr and PLVchr
        PLVsubst
        DBMS_utility
        PLVlex
        DBMS_ASSERT
        PLUnit
        DBMS_random

orafce的安装步骤如下:
http://pgxn.org/dist/orafce/

下载最新版本。
wget http://api.pgxn.org/dist/orafce/3.1.2/orafce-3.1.2.zip

安装
unzip orafce-3.1.2.zip
mv orafce-3.1.2 /opt/soft_bak/postgresql-9.4.5/contrib
cd /opt/soft_bak/postgresql-9.4.5/contrib/orafce-3.1.2

把pg_config命令放到当前路径,之后就可以编译安装。
export PATH=/opt/pgsql/bin:$PATH
make clean
make
make install

创建extension 。
su - postgres
psql
postgres=# create extension orafce;
CREATE EXTENSION

Oracle兼容 函数列表:
postgres=# \df
                                                                                                            List of functions
 Schema |        Name         |      Result data type       |                                                                        Argument data types                                                                         |  Type  
--------+---------------------+-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------
 public | bitand              | bigint                      | bigint, bigint                                                                                                                                                     | normal
 public | cosh                | double precision            | double precision                                                                                                                                                   | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint                                                                                                                                     | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint, anyelement, bigint                                                                                                                 | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint, anyelement, bigint, anyelement, bigint                                                                                             | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint, anyelement, bigint, anyelement, bigint, bigint                                                                                     | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint, anyelement, bigint, bigint                                                                                                         | normal
 public | decode              | bigint                      | anyelement, anyelement, bigint, bigint                                                                                                                             | normal
 public | decode              | character                   | anyelement, anyelement, character                                                                                                                                  | normal
 public | decode              | character                   | anyelement, anyelement, character, anyelement, character                                                                                                           | normal
 public | decode              | character                   | anyelement, anyelement, character, anyelement, character, anyelement, character                                                                                    | normal
 public | decode              | character                   | anyelement, anyelement, character, anyelement, character, anyelement, character, character                                                                         | normal
 public | decode              | character                   | anyelement, anyelement, character, anyelement, character, character                                                                                                | normal
 public | decode              | character                   | anyelement, anyelement, character, character                                                                                                                       | normal
 public | decode              | date                        | anyelement, anyelement, date                                                                                                                                       | normal
 public | decode              | date                        | anyelement, anyelement, date, anyelement, date                                                                                                                     | normal
 public | decode              | date                        | anyelement, anyelement, date, anyelement, date, anyelement, date                                                                                                   | normal
 public | decode              | date                        | anyelement, anyelement, date, anyelement, date, anyelement, date, date                                                                                             | normal
 public | decode              | date                        | anyelement, anyelement, date, anyelement, date, date                                                                                                               | normal
 public | decode              | date                        | anyelement, anyelement, date, date                                                                                                                                 | normal
 public | decode              | integer                     | anyelement, anyelement, integer                                                                                                                                    | normal
 public | decode              | integer                     | anyelement, anyelement, integer, anyelement, integer                                                                                                               | normal
 public | decode              | integer                     | anyelement, anyelement, integer, anyelement, integer, anyelement, integer                                                                                          | normal
 public | decode              | integer                     | anyelement, anyelement, integer, anyelement, integer, anyelement, integer, integer                                                                                 | normal
 public | decode              | integer                     | anyelement, anyelement, integer, anyelement, integer, integer                                                                                                      | normal
 public | decode              | integer                     | anyelement, anyelement, integer, integer                                                                                                                           | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric                                                                                                                                    | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric, anyelement, numeric                                                                                                               | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric, anyelement, numeric, anyelement, numeric                                                                                          | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric, anyelement, numeric, anyelement, numeric, numeric                                                                                 | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric, anyelement, numeric, numeric                                                                                                      | normal
 public | decode              | numeric                     | anyelement, anyelement, numeric, numeric                                                                                                                           | normal
 public | decode              | text                        | anyelement, anyelement, text                                                                                                                                       | normal
 public | decode              | text                        | anyelement, anyelement, text, anyelement, text                                                                                                                     | normal
 public | decode              | text                        | anyelement, anyelement, text, anyelement, text, anyelement, text                                                                                                   | normal
 public | decode              | text                        | anyelement, anyelement, text, anyelement, text, anyelement, text, text                                                                                             | normal
 public | decode              | text                        | anyelement, anyelement, text, anyelement, text, text                                                                                                               | normal
 public | decode              | text                        | anyelement, anyelement, text, text                                                                                                                                 | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone                                                                                                                     | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone, anyelement, time without time zone                                                                                 | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone, anyelement, time without time zone, anyelement, time without time zone                                             | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone, anyelement, time without time zone, anyelement, time without time zone, time without time zone                     | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone, anyelement, time without time zone, time without time zone                                                         | normal
 public | decode              | time without time zone      | anyelement, anyelement, time without time zone, time without time zone                                                                                             | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone                                                                                                                   | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone, anyelement, timestamp with time zone                                                                             | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone, anyelement, timestamp with time zone, anyelement, timestamp with time zone                                       | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone, anyelement, timestamp with time zone, anyelement, timestamp with time zone, timestamp with time zone             | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone, anyelement, timestamp with time zone, timestamp with time zone                                                   | normal
 public | decode              | timestamp with time zone    | anyelement, anyelement, timestamp with time zone, timestamp with time zone                                                                                         | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone                                                                                                                | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone, anyelement, timestamp without time zone                                                                       | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone, anyelement, timestamp without time zone, anyelement, timestamp without time zone                              | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone, anyelement, timestamp without time zone, anyelement, timestamp without time zone, timestamp without time zone | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone, anyelement, timestamp without time zone, timestamp without time zone                                          | normal
 public | decode              | timestamp without time zone | anyelement, anyelement, timestamp without time zone, timestamp without time zone                                                                                   | normal
 public | dump                | character varying           | "any"                                                                                                                                                              | normal
 public | dump                | character varying           | "any", integer                                                                                                                                                     | normal
 public | dump                | character varying           | text                                                                                                                                                               | normal
 public | dump                | character varying           | text, integer                                                                                                                                                      | normal
 public | nanvl               | double precision            | double precision, character varying                                                                                                                                | normal
 public | nanvl               | double precision            | double precision, double precision                                                                                                                                 | normal
 public | nanvl               | numeric                     | numeric, character varying                                                                                                                                         | normal
 public | nanvl               | numeric                     | numeric, numeric                                                                                                                                                   | normal
 public | nanvl               | real                        | real, character varying                                                                                                                                            | normal
 public | nanvl               | real                        | real, real                                                                                                                                                         | normal
 public | nvarchar2           | nvarchar2                   | nvarchar2, integer, boolean                                                                                                                                        | normal
 public | nvarchar2_transform | internal                    | internal                                                                                                                                                           | normal
 public | nvarchar2in         | nvarchar2                   | cstring, oid, integer                                                                                                                                              | normal
 public | nvarchar2out        | cstring                     | nvarchar2                                                                                                                                                          | normal
 public | nvarchar2recv       | nvarchar2                   | internal, oid, integer                                                                                                                                             | normal
 public | nvarchar2send       | bytea                       | nvarchar2                                                                                                                                                          | normal
 public | nvarchar2typmodin   | integer                     | cstring[]                                                                                                                                                          | normal
 public | nvarchar2typmodout  | cstring                     | integer                                                                                                                                                            | normal
 public | nvl                 | anyelement                  | anyelement, anyelement                                                                                                                                             | normal
 public | nvl2                | anyelement                  | anyelement, anyelement, anyelement                                                                                                                                 | normal
 public | sinh                | double precision            | double precision                                                                                                                                                   | normal
 public | tanh                | double precision            | double precision                                                                                                                                                   | normal
 public | to_multi_byte       | text                        | str text                                                                                                                                                           | normal
 public | to_single_byte      | text                        | str text                                                                                                                                                           | normal
 public | varchar2            | varchar2                    | varchar2, integer, boolean                                                                                                                                         | normal
 public | varchar2_transform  | internal                    | internal                                                                                                                                                           | normal
 public | varchar2in          | varchar2                    | cstring, oid, integer                                                                                                                                              | normal
 public | varchar2out         | cstring                     | varchar2                                                                                                                                                           | normal
 public | varchar2recv        | varchar2                    | internal, oid, integer                                                                                                                                             | normal
 public | varchar2send        | bytea                       | varchar2                                                                                                                                                           | normal
 public | varchar2typmodin    | integer                     | cstring[]                                                                                                                                                          | normal
 public | varchar2typmodout   | cstring                     | integer                                                                                                                                                            | normal
(88 rows)

Oracle兼容 dual表,在PG里用了一个视图来实现。
postgres=#  \dv
        List of relations
 Schema | Name | Type |  Owner   
--------+------+------+----------
 public | dual | view | postgres
(1 row)
postgres=# \d+ dual
                       View "public.dual"
 Column |       Type        | Modifiers | Storage  | Description 
--------+-------------------+-----------+----------+-------------
 dummy  | character varying |           | extended | 
View definition:
 SELECT 'X'::character varying AS dummy;

postgres=# select * from dual;
 dummy 
-------
 X
(1 row)

postgres=# select 1 from dual;
 ?column? 
----------
        1
(1 row)

Oracle兼容 包列表:
在PostgreSQL里用schema+函数来实现。
postgres=# \dn
     List of schemas
     Name     |  Owner   
--------------+----------
 dbms_alert   | postgres
 dbms_assert  | postgres
 dbms_output  | postgres
 dbms_pipe    | postgres
 dbms_random  | postgres
 dbms_utility | postgres
 madlib       | postgres
 oracle       | postgres
 plunit       | postgres
 plvchr       | postgres
 plvdate      | postgres
 plvlex       | postgres
 plvstr       | postgres
 plvsubst     | postgres
 public       | postgres
 utl_file     | postgres
(16 rows)

例如dbms_alert包:
postgres=# \df dbms_alert.*
                                                            List of functions
   Schema   |      Name      | Result data type |                              Argument data types                              |  Type   
------------+----------------+------------------+-------------------------------------------------------------------------------+---------
 dbms_alert | _signal        | void             | name text, message text                                                       | normal
 dbms_alert | defered_signal | trigger          |                                                                               | trigger
 dbms_alert | register       | void             | name text                                                                     | normal
 dbms_alert | remove         | void             | name text                                                                     | normal
 dbms_alert | removeall      | void             |                                                                               | normal
 dbms_alert | set_defaults   | void             | sensitivity double precision                                                  | normal
 dbms_alert | signal         | void             | _event text, _message text                                                    | normal
 dbms_alert | waitany        | record           | OUT name text, OUT message text, OUT status integer, timeout double precision | normal
 dbms_alert | waitone        | record           | name text, OUT message text, OUT status integer, timeout double precision     | normal
(9 rows)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
Oracle 关系型数据库 分布式数据库
PolarDB常见问题之PolarDB(Oracle兼容版) 执行命令报错如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
7月前
|
Oracle 关系型数据库 数据库
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
206 0
|
8月前
|
SQL Oracle 关系型数据库
物化视图(Oracle与PostgreSQL对比)
物化视图(Oracle与PostgreSQL对比)
|
4月前
|
SQL Oracle 关系型数据库
Oracle,Postgresql等数据库使用
Oracle,Postgresql等数据库简单使用
133 0
Oracle,Postgresql等数据库使用
|
7月前
|
Oracle 关系型数据库 分布式数据库
如何从Oracle迁移到PolarDB(ADAM)(二)
如何从Oracle迁移到PolarDB(ADAM)(二)
128 0
|
7月前
|
SQL Oracle 关系型数据库
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
697 0
|
13天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
52 7
|
1月前
|
Oracle 关系型数据库 数据库
|
30天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2

相关产品

  • 云原生数据库 PolarDB
  • 推荐镜像

    更多