《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(上)——三、产品相关概念(中)

简介: 《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(上)——三、产品相关概念(中)

更多精彩内容,欢迎观看:《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(上)——三、产品相关概念(上):

https://developer.aliyun.com/article/1222912?groupCode=certification


1. 权限管理

 

权限管理支持从实例、数据库、schema到object权限的控制。

 

1) 逻辑结构及其权限关系

 

实例权限:实例连接鉴权。

数据库权限:grant赋予是否允许连接或创造schema的权限和Revoke回收。

 

数据库级别权限包括:

是否允许连接数据库。

 是否允许在数据库中创建schema。

 默认允许public角色连接,即允许任何人连接。

 默认不允许除了超级用户和owner之外的任何人在数据库中创建schema。

 默认会自动创建名为public的schema,且允许任何人在里面创建对象。

 

schema权限:grant赋予允许查询schema中的对象和revoke回收。

 

schema级别权限包括:

 是否允许查看schema中的对象;

 是否允许在schema中创建对象;

 默认情况下新建的schema的权限不会赋予给public角色,因此除了超级用户和owner,任何人都没有权限查看schema中的对象或者在schema中新建对象。

 

object权限:grant赋予和revoke回收。

 

2) 权限管理:授予和撤销权限

 

授予权限的关键字:GRANT

 

GRANT权限ON对象类型对象名TO用户名,如:

 

 GRANT SELECT ON TABLE table TO user1;  --允许 user1 select table

 GRANT SELECT ON TABLE table TO public; --允许所有人 select table

 

撤销权限的关键字:REVOKE

 

REVOKE权限ON对象类型对象名FROM用户名,如:

 

 REVOKE SELECT ON TABLE table FROM user1; --不再允许 user1 select table

 

2. UDF与存储过程

 

1) UDF与存储过程概述

 

在AnalyticDB PostgreSQL中,创建UDF和存储过程都是采用CREATE FUNCTION语法。

不同于ORACLE、MYSQL等数据库,PostgreSQL中并没有专门用于创建存储过程的CREATE PROCEDURE语法。

以SQL过程语言PL/pgSQL用法最为广泛,最为贴近内核。

 

image.png

 

PL/pgSQL的功能特点

 

用于创建函数和触发器过程

为SQL语言增加控制结构

执行复杂的计算

继承所有用户定义类型、函数、操作符

定义为被服务器信任的语言

容易使用

 

2) PL/pgSQL基本结构介绍

 

AnalyticDB PostgreSQL函数通常结构如下:

 

CREATEFUNCTION  --函数名

CREATE FUNCTION somefunc(integer, text) RETURNS integer --返回类型

AS

functionfunction  --参数

function body text  --函数体

functionfunction

LANGUAGE plpgsql; --解释语言

 

3) 块结构介绍

 

PL/pgSQL是一个块结构语言,函数体由块结构组成,定义如下:

BLOCK[<<label>>][DECLARE  declarations]BEGIN  statementsEND [label];

  

注意

块中的每个声明和每条语句都是用一个分号终止。

块结构支持嵌套使用。子块用于逻辑分组,在子块中声明的变量在其范围之内,将屏蔽跟这个子块外部有着同样的名字的变量。

BEGIN之后不要分号。

END之后要分号。最外层的可缺省。

END后的标签要和块开始的标签保持一致。

所有关键字不区分大小写,默认转换成小写,除非被双引号引用。

注释的方法和普通SQL一样。

PL/pgSQL里用于语句块分组的 BEGIN/END 不是开始或者结束事务。

 

块结构示例

CREATE OR REPLACE FUNCTION somefunc()RETURNS integer AS $$
<<outerblack>>
DECLARE
quantity integer:=30;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 30
Quantity:= 50;
--
--Create a subblock
--
DECLARE
quantity integer:80
BEGIN
RAISE NOTICE 'Quantity here is %', quantity;  -- Prints 80
RAISE NOTICE 'Outer quantity here is %', outerblock.quantity; --Prints 50
END;
RAISE NOTICE 'Quantity here is %, quantity; --Prints 50
RETURN quantity;
END;
$$LANGUAGE plpgsal;

  

4) 捕获异常

 

PL/pgSQL通过EXCEPTION从句捕获异常。

 

[<<label>>]
[DECLARE
  declarations]
BEGIN
  statements
EXCEPTION
WHEN condition [OR condition ...] THEN
handler_statements
[WHEN condition[OR condition ...] THEN
handler statements
...]
END;

 

注意

condition表示异常类别,参考errcodes:

https://help.aliyun.com/document_detail/205012.html

特殊的异常类别OTHERS,可以匹配所有类别的异常。

块中包含EXCEPTION从句,则能够形成一个子事务,并且能够在不影响外部事务的前提下回滚。

 

示例

 

CREATE OR REPLACE FUNCTION f_block_exception()
RETURNS integer
LANGUAGEplpgsql
AS Sfunction$
DECLARE
x integer:= 0;
y integer:= 0;
BEGIN
SELECT COUNT(*) INTO x FROM mytab WHERE lastname='zhang';
INSERT INTO mytab(firstname, lastname) VALUES('san','zhang);
DECLARE
msg text;
BEGIN
UPDATEmytab sET firstname: three'WHERElastnamzhang;
x:=x+1;
y:=x/0;  --Exception occurs
EXCEPTION WHEN OTHERS THEN
GET STACKED DIAGNOSTICS msg := MESSAGE_TEXT;
RAISE NOTICE 'Caught exception:%',msg;
RETURN x;
END;
END;
$function$;


 

image.png

 

5) UDF示例

 

创建表student,插入3条记录

 

create table student(name varchar(30), score float4);
insert into student values('张三',88),('李四,99),('王五,92);


创建函数将student记录转换成json格式

 

create or replace function f_student_to json(student)
returns json
language plpgsql
strict
as function$
declare
    stu alias for $1;
begin
    return row_to_json(stu);
end;
$function$;

 

创建操作符>!<使用f_student_to_json函数

 

create operator>!<(procedure=f_student_to_json,
leftarg=student);

 

使用操作符>!<遍历student表

selects>!<from students;


 更多精彩内容,欢迎观看:《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(上)——三、产品相关概念(下):

https://developer.aliyun.com/article/1222910?groupCode=certification

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
8月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
|
11月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
|
12月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
|
10月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
|
11月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2025 年 3 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
662 7
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek 实践应用解析:合力亿捷智能客服迈向 “真智能” 时代
DeepSeek作为人工智能领域的创新翘楚,凭借领先的技术实力,在智能客服领域掀起变革。通过全渠道智能辅助、精准对话管理、多语言交互、智能工单处理、个性化推荐、情绪分析及反馈监控等功能,大幅提升客户服务效率和质量,助力企业实现卓越升级,推动智能化服务发展。
470 1
|
存储 自然语言处理 监控
深度解析淘宝商品评论API接口:技术实现与应用实践
淘宝商品评论API接口是电商数据驱动的核心工具,帮助开发者高效获取用户评价、画像及市场趋势。其核心功能包括多维度信息采集、筛选排序、动态更新、OAuth 2.0认证和兼容多种请求方式。通过该接口,开发者可进行商品优化、竞品分析、舆情监控等。本文详细解析其技术原理、实战应用及挑战应对策略,助力开启数据驱动的电商运营新篇章。

推荐镜像

更多
  • DNS