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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 《阿里云认证的解析与实战-数据仓库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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
15天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
61 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
6天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
1月前
|
运维 Cloud Native 数据可视化
阿里云云原生应用组装平台BizWorks满分通过最新评估
阿里云BizWorks满分通过《基于云计算的业务组装平台能力成熟度模型》评测,获得优秀级(最高等级),广东移动联合阿里云BizWorks团队开展的组装式应用实践获得第三届“鼎新杯”数字化转型应用优秀案例一等奖。
184 3
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
23天前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
51 0
|
2月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
针对软件供应链的攻击事件在以每年三位数的速度激增,其中三方或开源软件已经成为攻击者关注的重要目标,其攻击方式和技术也在不断演进。通过供应链的传播,一个底层软件包的漏洞的影响范围可以波及世界。企业亟需更加标准和完善的供应链风险洞察和防护机制。本文将结合最佳实践的形式,面向容器应用完整的生命周期展示如何基于容器服务ACK/ACR/ASM助力企业构建云原生软件供应链安全。
|
2月前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
14 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
66 0