暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL数据库对象(二)之与函数相关的对象

原创 lmj 2021-11-24
979

可查看之前发布的:数据库对象(一)之基本对象

  • DATA TYPE – 数据类型

每个数据库产品都有一组可使用的数据类型:整型、字符、数组等。PostgreSQL有一种称为复合类型的东西,这种类型具有其他类型的属性,例如:虚数、极坐标。可以定义自己的类型,可以定义新的函数和运算符来处理该类型。

  • OPERATOR – 操作符

运算符是符号化的命名函数(例如:=),它接受一个或两个参数,并且有函数的支持。

PostgreSQL支持左一元、右一元和二元操作符。操作符可以被重载,也就是说相同的操作符名称可以被用于具有不同操作数数量和类型的操作符。在执行一个查询时,系统会根据提供的操作数的数量和类型决定要调用的操作符。

在PostgreSQL中,定义自定义类型时,还可以定义使用该自定义类型的运算符。例如,可以为类型定义“=”运算符。甚至可以使用两种不同类型的操作数定义运算符。

  • RULE – 规则

规则系统(更准确地说是查询重写规则系统)与存储过程和触发器完全不同。它把查询修改为需要考虑规则,并且然后把修改过的查询传递给查询规划器进行规划和执行。它非常强大,并且可以被用于许多地方,如查询语言过程、视图和版本。

PostgreSQL中的视图是通过规则系统来实现的。

例:

CREATE VIEW myview AS SELECT * FROM mytab;
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
	SELECT * FROM mytab;

上面这两条语句没有什么不同,因为 CREATE VIEW 内部就是通过这种规则来实现。

规则也可以用来代替某些简单的触发器。通常会为update/insert/delete语句中的每条记录调用触发器。相反,一条规则重写了操作(SQL语句)或在原始SQL语句之上插入其他SQL语句,这避免了单独触发每条记录花费的代价。对于更改数据,触发器是首选的操作方法。许多PostgreSQL用户将规则视为基于操作的查询的遗留技术,因为当出现问题时,它们更难调试,而且您只能用SQL编写规则,而不能用任何其他语言编写规则

  • FUNCTION – 函数

SQL语言中的任何命令集合都能被打包在一起并且被定义成一个函数。函数也能被定义成返回基本类型或组合类型值的集合。

  • PROCEDURE – 存储过程

存储过程是一种类似于函数的数据库对象。

函数和存储过程的区别在于存储过程不返回值,因此没有返回类型声明。而函数可以作为一个查询或者DML命令的一部分被调用,存储过程则需要明确地用CALL语句调用。

  • TRRIGGER – 触发器

​触发器是一种由事件自动触发执行的特殊的存储过程,这些事件可以是对一个表进行INSERT、UPDATE、DELETE等操作。创建触发器之前要先建一个执行函数,此函数的返回类型为触发器类型,然后即可创建相应的触发器。

​触发器检测数据更改事件。当PostgreSQL触发触发器时,有机会执行触发器功能响应。触发器可以响应特定类型的语句或特定行的更改而运行,也可以在数据更改事件之前或之后触发。

从9.0版开始,WITH子句允许指定布尔WHEN条件,测试该条件以查看是否应触发触发器。版本9.0还引入了UPDATE OF子句,它允许指定要监视哪些列的更改。当列发生改变时,触发触发器。在9.1版中,视图中的数据更改也可以触发触发器。在9.3版中,数据定义语言(DDL)事件可以触发触发器。可以触发触发器的DDL事件列在事件触发器触发矩阵中。在9.4版中,引入了外部表的触发器。

最后修改时间:2021-11-25 09:06:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论