代码编织梦想

一、Pg数据库相比较于Oracle数据库有什么优势?
1、PostgreSql是目前功能最强大的开源数据库
2、稳定可靠:PostgreSql在主备库方面非常完善,可以搭建同步备库、异步备库、延迟备库,在同步备库中可以同时配置数据同步到任意备库上;且在配置备库过程中比Oracle更加简单;此外PostgreSql是唯一能做到数据零丢失的开源数据库,目前有报道称国内外有部分银行使用PostgreSql数据库
3、开源省钱:免费的、开源的,而且使用的是类BSD协议,在使用和二次开发上基本没有限制
4、有更多支持互联网特征的功能,如数据类型支持网络地址类型、XML类型、JSON类型、UUID类型以及数组类型,且有强大的正则表达式函数;且支持大量主流的开发语言,包括C、C++、perl、Python、Java以及PHP等
5、轻量小巧:Oracle安装包一般几个GB以上级别,PostgreSql安装包只有几十MB大小;且PostgreSql可以在内存很小的机器上完美运行,Oracle基本要在数GB的云主机上才可运行
6、PostgreSql社区活跃:PostgreSql基本每三个月推出一个补丁版本,这意味着已知的BUG很快会被修复
二、事务
1、基本概念:Transaction是数据库管理系统DBMS执行过程中的一个逻辑单元,是一个sql命令组成的序列.其特点在于,当事务被提交DBMS后,DBMS需要确保所有的操作被完成;如果事务中有的操作未完成,那么所有操作都将回滚,回到事务提交之前的状态
2、区别:
Postgresql中的事务要手动开启,否则直接写update/insert/delete是默认自动提交的,手动开启方式如下

begin;-开启事务
  update test set name = 'c' where id = 1;
end;关闭事务

只有执行了begin;开启事务,下面才可以接commit或rollback。后续end关闭事务;
Oracle数据库的事务无需手动开启,执行DML语句就会开启事务
三、子查询
Postgresql中子查询较为规范,子查询必须要取别名

select * from (select * from test) t; --正确写法
select * from (select * from test);   --报错:subquery in from must have an alias

Oracle中子查询别名可写可不写。
四、数据类型

OraclePostgreSql
numbersmallint/integer/bigint/decimal/numeric
varchar2varchar
datedate/time
clobtext
nullnull

五、分页
查询表中100条数据
PostgreSql中没有rownum伪列,有limit

--PostgreSql
select * from test t limit 100;
--Oracle
select * from test t where rownum <= 100;

六、部分函数差异
6.1 类型转换

--PostgreSql
select id::varchar from test;--使用两个冒号来进行类型转换
--Oracle
select cast(id as varchar2(10)) from test; --使用cast函数

6.2 空值转换

--PostgreSql
select coalesce(name,1) from test; --使用coalesce函数
--Oracle
select nvl(name,1) from test;  --使用nvl函数

6.3 decode操作
PostgreSql不支持decode操作,但可以用case when转换

--PostgreSql
select (case name when 'a' then 1 else 2 end) name from test;
--Oracle
select decode(name,'a',1,2) name from test;

6.4 ||拼接符
有部分差异,主要体现在与Null的拼接上

--PostgreSql
select 'a'||null from dual; --返回null
--Oracle
select 'a'||null from dual; --返回'a'

6.5 动态执行

--PostgreSql
execute 'select count(1) from test' into v_count;
--Oracle
execute immediate 'select count(1) from test' into v_count;

七、游标

OraclePostgreSql
%foundfound
%notfoundnot found
%isopen
%rowcount

八、存储过程和函数
示例

create or replace function sp_test()
returns integer
language plpgsql
$functions$
declare
  v_count integer;
begin
  execute 'select count(1) from test' into v_count;
  return v_count; --注意这里是return,不是returns
end;
$functions$
------------------------------------------------
create or replace function sp_test(out integer)
language plpgsql
$functions$
declare
  v_count integer;
begin
  execute 'select count(1) from test' into v_count;
end;
$functions$
----------------------------------------------------
create or replace function sp_test(out integer)
returns integer
language plpgsql
$functions$
declare
  v_count integer;
begin
  execute 'select count(1) from test' into v_count;
  --return v_count注意这里不能出现return语句,有out参数的情况下出现return语句会报错
end;
$functions$

以上创建语法都是正确的
1、Pgsql中的函数也被称为存储过程,即函数和存储过程是一体的
2、Pgsql中存储过程既可以有out返回参数又可以有returns返回值。我们可以这样理解:里面带有return关键字的相当于Oracle中函数,有OUT返回参数的相当于Oracle中存储过程
3、调用存储过程
–Oracle,调用存储过程有三种方式

call sp_test();
begin
  sp_test();
end;
exec sp_test();

–PostgreSql使用select查询语句来调用存储过程

select * from sp_test(入参1,入参2,入参3....);

有return关键字的pgsql存储过程可以通过上述方式调用来返回数据,如果是out参数是游标等类型呢?经过研究,可以通过以下方式调用

end;
begin;
select sp_test(入参1,入参2,入参3...);
fetch all in "<unnamed portal 1>"

九、declare/begin/end代码块
PostgreSql中也有代码块操作,语法和Oracle稍有不同

do
$do$
declare
  x text := '';
  v_sql varchar array := '{"li,shi,ming"}';
begin
  foreach x in array v_sql
  loop
    raise notice '%',x;
  end loop;
end
$do$

未完待续…欢迎各位大佬补充
关于Postgresql中一些特殊用法,可看下面这篇文章
PostgreSql学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nzbing/article/details/122171529

对oracle 、sql server、mysql、postgresql数据库优缺点分析-爱代码爱编程

对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析   Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,

oracle与postgresql使用差异对比与总结_little沫沫的博客-爱代码爱编程

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 1、基本数据类型差异 OraclePostgreSQLVarchar2v

postgresql 学习记录之与oracle区别(一)_iteye_16339的博客-爱代码爱编程

  与oracle的区别 1、数据类型区别 Oracle PostgresQL 注释 VARCHAR2 VARCHAR (character varying)   Long、 CLOB TEXT   DATE DATE/TIME/TIMESTAMP DATE仅包含日期、TIME仅包含时间、TIMESTAMP均包含,通常使用DA

oracle与postgresql的差异对比-爱代码爱编程

https://blog.csdn.net/pierre_/article/details/52268587#t3 这个链接教程挺好的,比较全面 接下来是我个人的侧重点 PostGreSQL里的数据分页是利用  limit  关键字 的,搭配子查询,PG的子查询和Oracle相较而言更严格,必须使用别名还有,Limit放在order by 后面

Oracle数据库与PostgreSQL数据库对比,以及PostgreSQL遇到的各种坑-爱代码爱编程

一.PostgreSQL数据库简介: 首先先百度一轮简介,PostgreSQL 是最先进的开放源码的数据库系统, 它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定 义类型和函数), 并且可以获得非常广阔范围的(开发)语言绑定 (包括 C,C++,Java,perl,tcl,和 python)。由于PostgreSQL的开源免费

distinct sql用法_PG语法解剖--基本sql语句用法入门-爱代码爱编程

概述 今天主要对PG数据库的一些基本SQL语句用法做个介绍,做个简单了解,也做备忘! 下面主要用例子来说明。 1、建表语句 create table test (id int8 primary key,info text,crt_time timestamp); 注意保留字 2、select into & create t

Oracle转PostgreSQL-爱代码爱编程

最近在做一些Oracle SQL转PostgreSQL的工作,顺便记录这些改变,以便以后再转换有个参考。 描述OraclePostgreSQL分页select * from ( select z.*,rownum as num from( " + sql + " ) z ) where num>=" + startRow + " and num&l

pg和oracle比较,oracle与postgresSQL比较-爱代码爱编程

Oracle:是当今市场上最大的关系数据库管理系统(RDBMS)供应商之一。通常称为Oracle数据库或Oracle DB PostgreSQL:常称为Postgres,是一种开放源代码和对象关系数据库管理系统。它是用C语言编写的,由一组自愿的开发人员开发。 支持系统 Oracle: It supports AIX, HP-UX, Linux,

pg和oracle比较,PostgreSQL与Oracle的sql差异-爱代码爱编程

### 1.rownum #### (1)Oracle分页查询使用rownum,PostgreSQL使用limit offset Oracle | PostgreSQL -|-|- select \* from (select rownum r,e.\* from emp e where rownum <=5) t where r>

pg和oracle比较,PostgreSQL与Oracle的差异对比-爱代码爱编程

Postgresql 与 Oracle 相关差异对比 通过查阅资料及实验,以下对比了 Postgresql 9.3 版本与 Oracle 11g版本的相关差异。注意:相关细节仍待考证和完善。 1. 基本语法差异 1.1. 基本数据类型差异 Oracle Postgresql Varchar2 varchar DATE date/tim

pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)-爱代码爱编程

与oracle的区别 1、数据类型区别 Oracle PostgresQL 注释 VARCHAR2 VARCHAR(character varying) Long、 CLOB TEXT DATE DATE/TIME/TIMESTAMP DATE仅包含日期、TIME仅包含时间、TIMESTAMP均包含,通常使用DATE NUM

postgre和oracle性能对比,Oracle和MySQL、PostgreSQL特性对比-爱代码爱编程

随着现代数据库可用特征集的迅速增加,很难区分孰好孰坏。例如Oracle里就有许多你可能从来都不需要的高级数据仓库特征。此外也可能有一些其它不可或缺的特征比如ACID事务特性。我们来看一看主要的一些特征,比如存储过程,视图,快照,表数据类型和事务等等。同时我们分析一下Postgresql,MySQL和Oracle这几个数据库,然后找出哪个能够满足你的需求

数据库PG和Oracle,详解Oracle,postgresql和mysql数据库架构对比-爱代码爱编程

总的来说,MySQL 可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql 解析,执行计划优化,querycache 的处理等等;    第二层就是存储引擎层,我们通常叫做Storage Engine Layer,也就是底层数据存取操作实现部分,由多种存储引

PGSQL与ORACLE语句区别(日常工作总结)-爱代码爱编程

工作需要,会做一些p与o库之间转换,记录一些相应的替换 序号用途oraclePgsql1数据类型varchar2varchar2数据类型numbernumeric3系统时间sysdateto_char(now(), 'yyyy-mm-dd hh24:mi:ss') 4时间函数:本月第一天  trunc(sysdate, ''mm'')date_trunc

postgresql和oracle语法区别-爱代码爱编程

查正在运行的SQL SELECT     procpid,     START,     now() - START AS lap,     current_query FROM     (         SELECT             backendid,             pg_stat_get_backend_pid (S.bac