pg入门10—pg中的language是什么

在 PostgreSQL(PG)中,Language(语言)是指用于编写存储过程、函数和触发器的编程语言。PostgreSQL 支持多种编程语言,这些语言可以用来创建存储在数据库中的函数,并在查询或触发器中调用。

内置和可扩展的编程语言

PostgreSQL 内置支持一种语言,即 SQL,本质上是查询语言。除此之外,还支持多种可扩展语言(PL,即 Procedural Language,过程化语言)。常见的语言包括:

  1. SQL:用于编写 SQL 查询逻辑,主要用于简单的操作和查询。
  2. PL/pgSQL:PostgreSQL 内置的过程化语言,类似于 Oracle 的 PL/SQL,支持变量、控制结构(如条件语句、循环)、异常处理等。适合编写复杂的逻辑和业务处理。
  3. PL/Python:允许用 Python 编写存储过程和函数,适合那些熟悉 Python 的开发者。
  4. PL/Perl:使用 Perl 编写存储过程。
  5. PL/Tcl:使用 Tcl 语言编写存储过程。

此外,PostgreSQL 支持外部语言扩展,可以安装第三方的语言扩展模块来支持更多的编程语言。

常见语言的特点和使用场景

  1. SQL

    • 用途:用于编写简单的查询和数据操作逻辑,适合不需要复杂逻辑的函数。
    • 示例:
      CREATE FUNCTION add_two_numbers(a INT, b INT) RETURNS INT AS $$ SELECT a + b; $$ LANGUAGE SQL;
  2. PL/pgSQL

    • 用途:PostgreSQL 默认的过程化语言,适合编写复杂的业务逻辑,支持循环、条件语句和异常处理。
    • 示例:
      CREATE FUNCTION calculate_discount(price NUMERIC, discount NUMERIC) RETURNS NUMERIC AS $$ DECLARE final_price NUMERIC; BEGIN final_price := price - (price * discount); RETURN final_price; END; $$ LANGUAGE plpgsql;
  3. PL/Python

    • 用途:使用 Python 编写函数,适合那些需要 Python 的丰富库和灵活性的场景。
    • 示例:
      CREATE FUNCTION py_add_two_numbers(a INT, b INT) RETURNS INT AS $$ return a + b $$ LANGUAGE plpythonu;
  4. PL/Perl

    • 用途:适合使用 Perl 语言的场景,适合需要文本处理的任务。
    • 示例:
      CREATE FUNCTION perl_hello() RETURNS TEXT AS $$ return "Hello from Perl!"; $$ LANGUAGE plperl;
  5. PL/Tcl

    • 用途:使用 Tcl 编写函数,适合那些熟悉 Tcl 的开发者。
    • 示例:
      CREATE FUNCTION tcl_hello() RETURNS TEXT AS $$ return "Hello from Tcl!" $$ LANGUAGE pltcl;

如何管理语言

  • 查看数据库中支持的语言:可以通过查询 pg_language 系统表来查看当前数据库中已安装的语言。

    SELECT * FROM pg_language;
  • 添加新语言:通过 CREATE LANGUAGE 命令可以向数据库中添加新的语言。例如,添加 plpgsql 语言:

    CREATE LANGUAGE plpgsql;
  • 删除语言:可以通过 DROP LANGUAGE 命令来删除不再需要的语言:

    DROP LANGUAGE plpgsql;

注意事项

  • 安全性:PostgreSQL 中的一些过程语言(如 plpythonuplperlu)是“不受信任”的语言,允许访问操作系统资源,因此在使用这些语言时需要特别注意安全问题。相对而言,像 plpgsql 这样的语言是“受信任”的,不允许访问外部系统资源。
  • 性能:不同的语言在性能上可能有所差异,对于简单的操作,SQL 或 plpgsql 可能是最佳选择,因为它们与数据库的集成更紧密。

语言的扩展性

除了内置的语言外,PostgreSQL 允许开发者编写并安装新的编程语言扩展模块(比如用 C 编写的扩展)。这使得 PostgreSQL 具备极强的可扩展性,能够适应不同开发者和业务场景的需求。

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

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

相关文章

240922-chromadb的基本使用

A. 基本使用 ChromaDB 是一个专门为向量数据库和嵌入查询优化的数据库。它可以与嵌入模型结合使用,存储和查询高维向量数据,通常用于大规模语义搜索、推荐系统等领域。 以下是使用 ChromaDB 的步骤: 1. 安装 ChromaDB 你可以通过 pip 安装…

96. UE5 GAS RPG 实现闪电链技能(一)

闪电链有一个施法的过程,就是在按键按下的过程,会在按下的过程一直持续造成伤害,一直等到条件不满足(技能键位抬起,蓝量不足,被眩晕)时,将结束技能,并退出技能状态。 所以…

【WSL迁移】将WSL2迁移到D盘

首先查看WSL状态:wsl -l -v 以压缩包的形式导出到其他盘。 wsl --export Ubuntu D:\Ubuntu_WSL\ubuntu.tar 注销原有的linux系统 wsl --unregister Ubuntu 导入系统到D盘 wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar 恢复默认用户 Ubuntu co…

如何保护您的机器学习模型

在计算机技术领域,很少有领域像人工智能(AI)和机器学习(ML)一样受到如此多的关注。这门学科位于计算机科学和数据分析的交叉点,已成为移动应用程序、语音助手、欺诈交易检测、图像识别、自动驾驶甚至医疗诊断不可或缺的一部分。 背景介绍由于机器学习模型…

数据结构与算法——Java实现 9.习题——删除链表倒数节点

目录 19. 删除链表的倒数第 N 个结点 方法1 通过链表长度直接删除 方法2 递归加入哨兵节点 ListNode 方法3 快慢指针法 苦难,区区挫折罢了,而我必定站在幸福的塔尖 —— 24.9.22 19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第…

预付费计量系统整体概念

1.预付费计量系统整体概念 A Payment Metering System is a collective infrastructure that supports the contractual relationship between a supplier of goods or services and a customer. It includes processes, functions, data elements, system entities (devices a…

鸿蒙 OS 开发零基础快速入门教程

视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…

IDEA创建Web项目(详细版)

目录 1 新建Web项目 步骤如下 1 打开idea,选择新建项目 2 点击创建 3 点击项目结构,选择添加模块 ---web 2 配置Tomcat 步骤如下 1 点击Edit Configurations(编辑配置) 1.1 右上角当前文件下 选择编辑配置 1.2 点击菜单栏中run 选…

宝塔linux 安装code-server指定对应的端口无法访问

这个一般就是nginx搞的鬼,如果服务正常启动,就是访问不了;大概就是宝塔安装的nginx配置没有代理code-server服务对应的端口,一般就是nginx配置文件的问题 安装默认的nginx会有一个配置文件 直接拉到最后会有一行这个&#xff0c…

Linux 文件系统(下)

目录 一.文件系统 1.文件在磁盘上的存储方式 a.盘面、磁道和扇区 b.分区和分组 2.有关Block group相关字段详解 a.inode编号 b.inode Table(节点表) c.Data blocks(数据区) d.小结 二.软硬链接 1.软链接 a.软链接的创建…

springboot启动流程之总体流程梳理

springboot的启动流程相当复杂,我们需要先把控整体流程,后面会有若干文章一一讲解springboot启动流程中的重要的细节,springboot的启动经过了一些一系列的处理,我们先看看整体过程的流程图 篇幅有限,我们这里先聊聊实…

N叉树的前序与后续遍历(含两道leetcode题)

文章目录 589. N 叉树的前序遍历递归法迭代法 590. N 叉树的后序遍历递归法迭代法 589. N 叉树的前序遍历 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由…

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析

完整试题,CSP-S-2024 CSP-S 2024 提高组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 在 Linux 系统中,如果你想显示当前工作目录的…

哔哩哔哩自动批量删除抽奖动态解析篇(一)

本文的分析过程可能需要读者了解一点前后端数据交互和逆向分析的思路和基础,由于本人是新手,自己也处于摸索学习阶段,说的不对或者不好的地方敬请谅解。 一、删除动态流程分析 B站每条动态无论是转发他人的动态还是自己原创发布的动态都有一…

蓝桥杯1.小蓝的漆房

样例输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3样例输出 1 2 import math import os import sys tint(input())#执行的次数 for j in range(t):n,kmap(int,input().split())#n为房间数 k为一次能涂的个数alist(map(int,input().split()))#以列表的形式存放房间的颜色maxvaluemath…

MySQL数据库的增删改查以及基本操作分享

1、登录MySQL数据库 首先找到你安装MySQL数据库的目录,然后在终端打开该目录,输入以下命令 mysql -u root -p然后输入密码就可以登录数据库了,看到如下页面就是登陆成功了 ***注意在终端操纵数据库时所有语句写完之后一定要加 &#xff1…

【基础算法总结】模拟篇

目录 一,算法介绍二,算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三,算法总结 一,算法介绍 模拟算法本质就是"依葫芦画瓢",就是在题目中已经告诉了我们该如何操作…

【记录】大模型|Windows 下 Hugging Face 上的模型的通用极简调用方式之一

这篇文是参考了这篇,然后后来自己试着搭了一下,记录的全部过程:【翻译】Ollama|如何在 Ollama 中运行 Hugging Face 中的模型_ollama 导入 huggingface-CSDN 博客 另外还参考了这篇:无所不谈,百无禁忌,Win11 本地部署无…

【大模型】AutoDL部署AI绘图大模型Stable Diffusion使用详解

目录 一、前言 二、AI绘图大模型概述 2.1 AI绘图大模型介绍 2.2 AI绘图大模型特点 2.3 AI绘图大模型优势 三、主流的AI绘图大模型介绍 3.1 Midjourney 3.1.1 Midjourney介绍 3.1.2 Midjourney功能特点 3.1.3 Midjourney使用场景 3.2 Stable Diffusion 3.2.1 Stable …

【WRF运行第二期(Ubuntu)】ARWpost安装

WRF运行第二期:ARWpost安装 1 ARWpost介绍2 ARWpost安装2.1 ARWpos_V3安装前准备2.2 安装ARWpos2.3 修改Makefile文件2.4 修改configure.arwp文件2.5 生成可执行文件EXE2.6 修改namelist.ARWpost 参考 1 ARWpost介绍 ARWpost 是WRF模型后处理程序之一,用…