Navicat 干货 | 掌握 PostgreSQL 规则语法

news2024/12/27 12:00:06

PostgreSQL 规则提供了一种强大的机制,控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中,我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例数据库 ,通过更多实际例子详细介绍规则的语法。

PostgreSQL 规则的原子性

PostgreSQL 规则由多个关键组件组成,这些组件定义了它们的行为:

  • CREATE RULE 语句:要创建规则,我们使用 CREATE RULE 语句,后面跟上规则名称和规则定义。
  • 规则事件:规则可以由各种事件触发,包括 SELECTINSERTUPDATEDELETE 或组合(ALL)。
  • 规则动作:当规则被触发时,动作指定应该发生什么。它可以是一个 SQL 语句,如 SELECTINSERTUPDATEDELETE,或是一个自定义动作。
  • 规则条件:条件是可选的,并允许规则仅在满足某些条件时触发。它们通过使用 WHERE 子句来指定。

使用“dvdrental”样本数据库的实例:

实例 1:审计插入操作

假设我们想要记录所有插入到“customer”表中的数据,以用于审计目的。首先,我们需要一个表来存储审计数据:

CREATE TABLE customer_audit (
    action_type VARCHAR(10),
    customer_id INT,
    audit_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

我们还可以使用 Navicat for PostgreSQL 16 的表设计器来创建上述表。下面是这个表的样子:

customer_audit_table_design (55K)

现在我们将创建一个规则,每当添加一个新客户时,该规则将在审计表中插入一条记录:


CREATE RULE log_customer_insert AS
    ON INSERT TO customer
    DO ALSO
        INSERT INTO customer_audit (action_type, customer_id)
        VALUES ('INSERT', NEW.customer_id);

在 Navicat 中,你可以在表设计器的“规则”选项卡下找到特定表的规则。这是 log_customer_insert 规则:

log_customer_insert_rule (46K)

实例 2:限制更新

假设我们想要防止在设置了租赁归还日期后对其进行更新。我们可以创建一个规则,该规则会阻止在最初设置归还日期列后任何尝试更新它的行为:

CREATE RULE prevent_return_date_update AS
    ON UPDATE TO rental
    WHERE OLD.return_date IS NOT NULL AND NEW.return_date IS DISTINCT FROM OLD.return_date
    DO INSTEAD NOTHING;

这是 Navicat 中的 prevent_return_date_update 规则:

prevent_return_date_update_rule (53K)

你可能还记得 上周文章 中提到的 enforce_min_rental_duration 规则。

实例 3:数据转换

假设我们想将“address”表中存储的电话号码格式从国际格式转换为本地格式。我们可以创建一条规则,该规则将在插入一个新地址时自动更新电话号码:

CREATE RULE transform_phone_number AS
    ON INSERT TO address
    DO ALSO
        UPDATE address
        SET phone = '+1-' || SUBSTRING(phone FROM 3)
        WHERE address_id = NEW.address_id;

需要在更多空间中输入完整的 Where 或 Definition 语句?点击文本框后面的省略号【…】按钮,将打开一个更大的文本区域,你可以在其中查看和编写完整的语句。下面是 Navicat 中的 transform_phone_number 规则,它显示了完整的定义语句

transform_phone_number_rule (63K)

结语

PostgreSQL 规则提供了一套多功能工具集,用于实现复杂的逻辑和确保数据库中的数据完整性。通过探索各种示例,如审计插入、限制更新和数据转换,开发人员可以更深入地了解如何有效地应用规则来满足各种需求。借助 PostgreSQL 灵活的规则系统,开发人员可以定制数据库的行为以满足特定的业务需求,同时确保数据的一致性和可靠性。

PostgreSQL 相关技术内容

PostgreSQL 与 Navicat:数据库行业的中坚力量

在 PostgreSQL 中存储三元数据

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图的使用

为什么在下一个 IT 项目中选择使用 PostgreSQL

PostgreSQL 中的多版本并发控制

使用 Navicat Monitor 3.0 监控 PostgreSQL

Navicat Monitor 3 中查看 PostgreSQL 实例详细信息

使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询

在 PostgreSQL 中设置查询超时

了解 PostgreSQL 规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笔记本电脑坏了硬盘数据会丢失吗 笔记本电脑坏了如何取出硬盘的资料 数据恢复软件

笔记本电脑对我们真的非常重要了,是实现无纸化办公和学习的重要工具,但是如果笔记本电脑坏了我们存储在电脑里的资料该怎么办?笔记本电脑坏了硬盘数据会丢失吗?相信有许多朋友都会有这样的担忧。本文今天就为大家解决笔记本电脑坏…

3月衣物清洁行业数据概况和趋势分析:总销额环比上涨超60%!

人们日常生活离不开衣物清洁产品,同时随着生活品质得提高和消费者健康意识得增强,对于衣物清洁行业的需求量与日俱增。作为日常必备的消耗品,衣物清洁产品备受消费者关注。借此,衣物清洁行业在3月份表现出稳定的发展态势。 根据鲸…

【软件测试】关于Web自动化测试

文章目录 🍃前言🌲如何实现Web自动化🚩安装驱动管理🚩Selenium库的安装 🌳自动化常用函数🚩元素的定位🎈cssSelector🎈xpath 🚩操作测试对象🎈点击/提交对象—…

洗地机选哪个牌子好?过来人建议买这四款:性价比高质量好

随着生活节奏的加快,洗地机逐渐成为了人们生活中的清洁小能手,但市面上品牌众多,性能参差不齐,消费者往往难以抉择。在选择洗地机时,我们不仅要考虑其清洁效果,还应着重考察性价比。那么,面对如…

3.AlexNet--CNN经典网络模型详解(pytorch实现)

看博客AlexNet--CNN经典网络模型详解(pytorch实现)_alex的cnn-CSDN博客,该博客的作者写的很详细,是一个简单的目标分类的代码,可以通过该代码深入了解目标检测的简单框架。在这里不作详细的赘述,如果想更深…

[Meachines][Easy]Devvortex

Main $ nmap -p- 10.10.11.242 --min-rate 1000 # echo 10.10.11.242 devvortex.htb>>/etc/hosts 子域名爆破 $ apt install seclists $ wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u "http://devvortex.htb/" -H &…

【Transformer】detr梳理

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 detr detr 1. 引言 论文: https://arxiv.org/pdf/2005.12872v3.pdf 时间: 2020.5.26 作者: Nicolas Carion?, Fra…

陈奂仁联手 The Sandbox 推出“Hamsterz Doodles”人物化身系列

全新人物化身系列结合艺术与实用性 开创元宇宙新篇章 著名亚洲唱作歌手兼香港电影金像奖得主陈奂仁携手 The Sandbox,兴奋地宣布推出新的元宇宙人物化身系列 —— Hamsterz Doodles 仓鼠涂鸦。 陈奂仁在 The Sandbox 推出 Hamsterz Doodles 系列,将艺术与…

智能家居—ESP32开发环境搭建

相关文章 毕业设计——基于ESP32的智能家居系统(语音识别、APP控制) 智能家居—ESP32开发环境搭建 一、下载安装二、验证三、资料获取 一、下载安装 下载安装 vscode 安装插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup c…

类和对象(2)——封装(封装的概念、包、staic)

前言 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。 一、什么是封装 1.1 概念 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节&…

【码农圈子】想加免费的程序员微信群的看过来

群名:码农圈子 很多人后台反应,最近有没有免费的微信技术交流社群 。今天特意写一篇文章来创建一些只有程序猿的微信群。(广告党慎入!) 这些微信技术群都是完全免费,后续也不会收取任何费用 。 群规则 …

Paragon NTFS如何手动更新? Paragon NTFS格式化硬盘会损失数据吗?

Paragon NTFS for Mac常被用于实现在Mac上读写NTFS格式硬盘,然而,有时用户可能会遇到软件无法自动更新的情况,需要进行手动更新操作。下面我们来看看Paragon NTFS如何手动更新,Paragon NTFS格式化硬盘会损失数据吗的相关内容。 一…

Python 使用 pip 安装 matplotlib 模块(精华版)

pip 安装 matplotlib 模块 1.使用pip安装matplotlib(五步实现):2.使用下载的matplotlib画图: 1.使用pip安装matplotlib(五步实现): 长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意…

【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy

实现一个IIR滤波器的设计 背景 Matlab 设计的滤波器通常封装过于完整,虽然在DSP中能够实现更多功能的滤波器设计但是很难实现Python端口的实现。 我们以一段原始的生物电信号EEG信号进行处理。 EEG信号 1.信号获取 EEG信号通常通过头皮电极,经过多通道采样芯片采样,将获…

mysql面试题八(SQL语句)

目录 1.SQL 基本组成部分 常用操作示例 创建表 插入数据 查询数据 更新数据 删除数据 创建索引 授予用户权限 2.常见的聚合查询 1. 计数(COUNT) 2. 求和(SUM) 3. 平均值(AVG) 4. 最大值&…

使用FPGA实现超前进位加法器

介绍 前面已经向大家介绍过8位逐位进位加法器了,今天向大家介绍4位超前进位加法器。 对于逐位进位加法器来说,计算任意一位的加法运算时,必须等到低位的加法运算结束送来进位才能运行。这种加法器结构简单,但是运算慢。 对于超…

WSL安装-问题解决

WslRegisterDistribution failed with error: 0x8004032d WslRegisterDistribution failed with error: 0x80080005 Error: 0x80080005 ??????? 解决: 1、 winr输入:optionalfeatures.exe 2、打开这两项

钉钉报警的优势在哪里?如何配置钉钉机器人进行报警信息推送?

一、常见的报警方式 1、短信或者电话报警 这样的报警方式更适合高级别的报警提醒,用于处理紧急情况。出现级别不高而又频繁地发送短信会让人产生排斥感,而且电话或者短信的报警方式也存在一定的成本。 2、邮件报警 邮件报警更适用于工作时的提醒&…

支付方式模块代码示例

支付方式模块代码示例 效果展示 <view class"card"><uni-title type"h3" title"支付方式"></uni-title><radio-group change"radioChange"><label class"radio"><view class"zf-t…

ThingsBoard通过规则链使用邮件发送报警信息

1、描述 2、通过规则链路配置发送邮件只需 两步 3、案例 1、基础链路 2、选择变换节点里面的To Email 3、 编辑节点to email 4、 将创建告警与to email链接 5、选择外部节点中的send email 6、配置邮箱相关信息&#xff0c;如过不知道密钥如何获取的&#xff0c;请查看下…