欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PostgreSQL特性和与ORACLE的区别

程序员文章站 2022-05-01 16:51:19
PostgreSQL特性和与ORACLE的区别...

PostgreSQL特性和与ORACLE的区别

角色Role:管理数据库访问权限。根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象(比如表)以及可 以把这些对象上的权限赋予其它角色,以控制谁拥有访问哪些对象的权限。
用户User:其实用户和角色都是角色,只是用户是具有登录权限的角色。
模式Schema:一个数据库包含一个或多个命名模式,模式中包含着表。模式还包含其他类型的命名对象,包括数据类型、函数和操作符。相同的对象名称可以被用于不同的模式中而不会出现冲突。
PG重要变量search_path:系统将沿着一条搜索路径来决定该名称指的是哪个表,搜索路径是一个进行查看的模式列表。 搜索路径中第一个匹配的表将被认为是所需要的。如果在搜索路径中没有任何匹配,即使在数据库的其他模式中存在匹配的表名也将会报告一个错误。
搜索路径中的第一个模式被称为当前模式。除了是第一个被搜索的模式外,如果CREATE TABLE命令没有指定模式名,它将是新创建表所在的模式。
要显示当前搜索路径,使用下面的命令: show search_path。
PG数据类型-数字型:
PostgreSQL特性和与ORACLE的区别
类型选择:若对精度要求高,对性能优先级低,建议是用numeric或者其他合适类型,比如money
多零问题解决办法:格式化: rtrim(to_char(小数,‘FM99999990.99’),’.’)

字符型PostgreSQL特性和与ORACLE的区别
通常情况下使用:text或者character varting
日期可以接受任何合理格式,不需要像oracle加上date

查询语句语法差异:
别名:子查询必须使用别名,case不能作为别名,name可做表别名,作为字段别名需要加关键词as
差集: except(oracle使用minus )
去重: distinct(不能使用oracle的uniq )
offset:偏移,从0开始
limit:条数限制
序列查询:select nextval(‘sequenceName’)/currval('sequenceName’)
ctid:表示数据记录的物理行当信息
日期表示:current_date、now()/current_timestamp、sysdate()
类型强转符号(双冒号) ::
空串:空串与null不等同,空串长度为零的字符串,已修改内核跟oracle保持一致
delete,update语句:
delete from:不能缺少from
update table_name t set column=values:更新字段不能带别名
for循环写法:

DECLARE
	--PG中for循环接受的变量需预定义
    i record;
BEGIN
FOR i IN (select * from t_cursor1)
 loop
   --在PG中增加这条语句将无法执行
   --exit when not found;
   raise notice '%',i.name; 
 end loop;
 end;

特色函数:
wm_contant 结果text类型,无需to_char
string_agg:返回的类型是text ,可以无限长。 可以达到1g 的长度。
lengthb :select lengthb(‘中国’) ,结果:6
ratio_to_report(pg没有)
ratio_to_report(bal)over() bal/nullif(sum(bal) over(),0)

本文地址:https://blog.csdn.net/Super__Bill/article/details/106144517