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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 《阿里云认证的解析与实战-数据仓库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

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3天前
|
自然语言处理 文字识别 数据处理
多模态文件信息抽取:技术解析与实践评测!
在大数据和人工智能时代,企业和开发者面临的挑战是如何高效处理多模态数据(文本、图像、音频、视频)以快速提取有价值信息。传统方法效率低下,难以满足现代需求。本文将深度评测阿里云的多模态文件信息抽取解决方案,涵盖部署、应用、功能与性能,揭示其在复杂数据处理中的潜力。通过自然语言处理(NLP)、计算机视觉(CV)、语音识别(ASR)等技术,该方案助力企业挖掘多模态数据的价值,提升数据利用效率。
15 4
多模态文件信息抽取:技术解析与实践评测!
|
5天前
|
存储 物联网 大数据
探索阿里云 Flink 物化表:原理、优势与应用场景全解析
阿里云Flink的物化表是流批一体化平台中的关键特性,支持低延迟实时更新、灵活查询性能、无缝流批处理和高容错性。它广泛应用于电商、物联网和金融等领域,助力企业高效处理实时数据,提升业务决策能力。实践案例表明,物化表显著提高了交易欺诈损失率的控制和信贷审批效率,推动企业在数字化转型中取得竞争优势。
37 14
|
21天前
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
5天前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
30天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
158 30
|
19天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
19天前
|
Cloud Native 安全 Java
杭州铭师堂的云原生升级实践
在短短 2-3 年间,杭州铭师堂完整经历了云计算应用的四个关键阶段:从“启动上云”到“全量上云”,再到“全栈用云”,最终达到“精益用云”。也从云计算的第一次浪潮,迈过了第二次浪潮,顺利的进入到了 第三次浪潮 AI + 云。
|
30天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
133 14
|
19天前
|
运维 安全 Cloud Native
阿里云云安全中心全面解析
阿里云云安全中心作为一款集持续监测、深度防御、全面分析、快速响应能力于一体的云上安全管理平台,为企业提供了全方位的安全保障。本文将详细介绍阿里云云安全中心的功能、应用场景、收费标准以及购买建议,帮助您更好地了解和利用这一强大的安全工具。
阿里云云安全中心全面解析
|
5天前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
24 0