PostgreSQL父子建表查询所有的子数据-利用自定义函数查询

pgsql  函数查询代码

select find_space_tree_list_by_nodeid('1','1') 

 查询结果示意图

 获取子集函数代码

CREATE OR REPLACE FUNCTION "public"."find_space_tree_list_by_nodeid"("nodeid" varchar, "viewid" varchar)
  RETURNS "pg_catalog"."varchar" AS $BODY$
	-- Routine body goes here...
   DECLARE 
	 sTemp VARCHAR:=nodeId;
    sTempChd VARCHAR:=nodeId;
		BEGIN
		WHILE sTempChd is not null loop
	 if sTemp<>sTempChd  then 
	  		 sTemp:=concat(sTemp,',',sTempChd);
	 END IF;
     SELECT string_agg(id,'') INTO sTempChd FROM public.t_bim_space where view_id=viewId 
		 and parent_id=ANY (string_to_array(sTempChd,','));
    END loop;
	RETURN sTemp;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

注意:与mysql函数不同,pgsql的函数名必须是小写,否则会报错!

相关知识

在PostgreSQL中,可以创建自定义函数来满足特定的业务需求。自定义函数允许您编写自己的SQL语句和逻辑,并将其封装为可重复使用的函数。下面是有关PostgreSQL自定义函数的详细解释:

  1. 函数创建: 使用CREATE FUNCTION语句创建自定义函数。指定函数的名称、参数列表、返回类型和函数体(即函数的实际逻辑)。例如:

    CREATE FUNCTION my_function(param1 data_type, param2 data_type) 
    RETURNS return_type AS
    $$
    -- 函数逻辑代码
    $$
    LANGUAGE sql; -- 或者指定其他支持的语言,如plpgsql、plpython等
    
  2. 参数: 可以定义函数所需的参数。参数可以是输入参数、输出参数或者两者兼有。每个参数都具有数据类型和参数名称。例如:

    CREATE FUNCTION my_function(param1 integer, param2 text)
    ...
    
  3. 返回类型: 定义函数的返回类型,即函数执行后的结果类型。返回类型可以是标量类型(如整数、文本等)、表类型或复合类型(如记录)等。

  4. 函数体: 函数体是函数的实际逻辑部分,其中包含SQL语句、流程控制语句(如IF-ELSE、FOR循环等)和变量声明等。根据所选的语言,函数体可以使用不同的语法和特性。

  5. 语言: PostgreSQL支持多种编程语言来编写自定义函数,例如SQL、PL/pgSQL、PL/Python等。可以根据需要选择适合的语言。

  6. 调用方式: 创建自定义函数后,可以通过SELECT语句或其他函数中的表达式来调用它。可以像内置函数一样使用自定义函数。

  7. 函数重载: 在PostgreSQL中,您可以为同一个函数名称创建多个函数定义,但参数类型或数量必须不同。这被称为函数重载。系统会根据实际传递的参数来确定要调用哪个函数定义。

  8. 函数删除: 使用DROP FUNCTION语句可以删除已创建的自定义函数。例如:

    DROP FUNCTION my_function(param1 data_type, param2 data_type);

自定义函数在PostgreSQL中非常强大和灵活,可以根据具体业务需求编写复杂的逻辑处理。它们提供了一种封装和重用代码的方式,并且可以与SQL语句无缝集成,使得数据库操作更加高效和便捷。

PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),因其可靠性、可扩展性和功能丰富性而备受推崇。它支持广泛的数据类型,具有高级事务处理能力,并提供了丰富的特性和扩展性选项。

下面是对PostgreSQL的详细解析:

  1. 数据模型:PostgreSQL采用了关系型数据库的数据模型,支持表、视图、索引等常见的关系型数据库概念。每个数据库由多个模式(Schema)组成,每个模式包含多个表。表可以定义列、约束和触发器等。

  2. 数据类型:PostgreSQL提供了广泛的内置数据类型,包括整数、浮点数、字符、日期/时间、布尔值等。此外,还支持数组、JSON、XML、网络地址、几何数据等复杂数据类型。同时,用户还可以自定义数据类型以满足特定需求。

  3. 扩展性:PostgreSQL具有出色的扩展性,可以通过增加额外的模块来增强其功能。这些模块被称为扩展(Extension),可以添加新的数据类型、函数、索引类型和查询优化策略等。PostgreSQL社区也提供了大量的扩展,如PostGIS用于地理信息系统、pgcrypto用于数据加密等。

  4. 事务处理:PostgreSQL支持ACID(原子性、一致性、隔离性和持久性)事务属性,确保数据的完整性和一致性。它使用多版本并发控制(MVCC)来实现高并发的事务处理,允许多个事务并发地读取和修改数据,而不会相互干扰。

  5. 查询语言:PostgreSQL使用结构化查询语言(SQL)作为其主要查询语言。它支持标准SQL语法,并提供了一些扩展功能,如窗口函数、递归查询、全文搜索等。此外,PostgreSQL还支持存储过程和触发器,可以在数据库中执行复杂的业务逻辑。

  6. 高级特性:PostgreSQL具有一些高级特性,如部分索引、表空间管理、热备份、逻辑复制等。部分索引允许在数据集的子集上创建索引,提高查询性能。表空间管理允许将数据文件存储在不同的物理位置,提供更好的存储管理。热备份和逻辑复制提供了可靠的数据备份和复制机制。

  7. 多语言支持:PostgreSQL支持多种编程语言的集成,包括Java、Python、Ruby、C/C++等。用户可以使用这些编程语言编写存储过程、触发器和自定义函数,并与数据库进行交互。

  8. 安全性:PostgreSQL提供了强大的安全特性,包括身份验证、访问控制和数据加密。它支持多种身份验证方法,如密码验证、证书验证等。访问控制可以通过角色和权限进行细粒度的控制。数据加密功能允许对敏感数据进行加密存储。

总结来说,PostgreSQL是一款功能强大且灵活的开源关系型数据库管理系统。它具有广泛的数据类型支持、高级事务处理能力、扩展性选项和安全特性。无论是小型应用程序还是大型企业级系统,PostgreSQL都能提供稳定可靠的数据存储和处理解决方案。

相关文章推荐

《MYSQL 父子建表查询所有的子数据-利用自定义函数查询》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用StorageClass动态创建pv

rook-ceph安装部署到位后&#xff0c;就可以开始来尝试使用StorageClass来动态创建pv了。 有状态的中间件在kubernetes上落地基本上都会用到StorageClass来动态创建pv&#xff08;对于云上应用没有那么多烦恼&#xff0c;云硬盘很好用&#xff0c;但是对于自己学习和练习来说还…

DataWhale 机器学习夏令营第三期

DataWhale 机器学习夏令营第二期 学习记录一 (2023.08.18)1.赛题理解2.缺失值分析3. 简单特征提取4. 数据可视化离散变量离散变量分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录一 (2023.08.18) 已跑通baseline&#xff0c;换为lightgbm基线&#…

SpringCloud Ribbon中的7种负载均衡策略

SpringCloud Ribbon中的7种负载均衡策略 Ribbon 介绍负载均衡设置7种负载均衡策略1.轮询策略2.权重策略3.随机策略4.最小连接数策略5.重试策略6.可用性敏感策略7.区域敏感策略 总结 负载均衡通器常有两种实现手段&#xff0c;一种是服务端负载均衡器&#xff0c;另一种是客户端…

无涯教程-PHP.INI File Configuration函数

PHP配置文件php.ini是影响PHP功能的最终且最直接的方法。每次初始化PHP时都会读取php.ini文件。换句话说,无论是模块版本的httpd重新启动还是CGI版本的每次脚本执行都重新启动。如果未显示您的更改,请记住停止并重新启动httpd。 该配置文件已注释完整。键区分大小写,关键字值不…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘

一.拉取镜像 docker pull mysql:5.7 docker pull owncloud 二.创建容器 1.MySQL容器 docker run -d --name db1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456. -e MYSQL_DATABASEowncloud -e MYSQL_USERowncloud -e MYSQL_PASSWORDowncloud mysql:5.7 docker run: 创建和运行…

中英双语对话大语言模型:ChatGLM-6B

介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本地部署&#xff08;INT4 量化级别下最低只需 6GB 显存&#xff09;。…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…

利用屏幕水印学习英语单词,无打扰英语单词学习

1、利用屏幕水印学习英语单词&#xff0c;不影响任何鼠标键盘操作&#xff0c;不影响工作 2、利用系统热键快速隐藏&#xff08;ALT1键 隐藏与显示&#xff09; 3、日积月累单词会有进步 4、软件下载地址: 免安装&#xff0c;代码未加密&#xff0c;安全的屏幕水印学习英语…

Visual Studio 2019 c++ 自定义注释 ----doxygen

可加入C 也可自定义。 <?xml version"1.0" encoding"utf-8"?> <CodeSnippets xmlns"http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"><CodeSnippet Format"1.0.0"><Header><Title>注释…

深入理解Java线程

进程、线程和协程 进程 程序由指令和数据组成&#xff0c;但程序要运行就要将指令加载进CPU以及数据加载进内存&#xff0c;并且在指令运行过程中可能还会用到磁盘、网络等设备。进程就是用来加载指令、管理内存和IO的。当一个程序被运行&#xff0c;从磁盘加载这个程序的代码…

08-信息收集-架构、搭建、WAF等

信息收集-架构、搭建、WAF等 信息收集-架构、搭建、WAF等一、前言说明二、CMS识别技术三、源码获取技术四、架构信息获取技术五、站点搭建分析1、搭建习惯-目录型站点2、搭建习惯-端口类站点3、搭建习惯-子域名站点4、搭建习惯-类似域名站点5、搭建习惯-旁注&#xff0c;c段站点…

微信小程序使用npm引入三方包详解

目录 1 前言2 微信小程序npm环境搭建2.1 创建package.json文件2.2 修改 project.config.json2.3 修改project.private.config.json配置2.4 构建 npm 包2.5 typescript 支持2.6 安装组件2.7 引入使用组件 1 前言 从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或…

Redis高可用:主从复制详解

目录 1.什么是主从复制&#xff1f; 2.优势 3.主从复制的原理 4.全量复制和增量复制 4.1 全量复制 4.2 增量复制 5.相关问题总结 5.1 当主服务器不进行持久化时复制的安全性 5.2 为什么主从全量复制使用RDB而不使用AOF&#xff1f; 5.3 为什么还有无磁盘复制模式&#xff…

Three.js 实现模型材质局部辉光(发光,光晕)效果和解决辉光影响场景背景图显示的问题

1.Three.js 实现模型材质局部辉光&#xff08;发光&#xff0c;光晕&#xff09;效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用&#xff1a; 1. EffectComposer&#xff08;渲染后处理的通用框架&#xff0c;用于将多个渲染通道&#xff08;pass&#xff09;组…

LVS+Keepalived

本章结构 1、Keepalived概述 2、Keepalived体系&#xff0c;主要的模块 3、Keepalived工作原理 4、LVSKeepalived的部署 一、Keepalived概述 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题。 vrrp通信原理&#…

学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答

课后练习解答 增加按键3&#xff0c;按下后表示启动&#xff0c;选择的对应的功能的LED持续闪烁&#xff0c;表示正在工作&#xff0c;且在工作的时候无法切换功能。 需求分解 1 增加按键3 #define KEY3 P34 //增加按键32 按下后表示启动 电平控制3 工作状态锁定 表示正在…

2023国赛数学建模A题B题C题D题资料思路汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022年数学建模c题思路_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛a题题目_UST数模…

EasyExcel工具 Java导出Excel表数据

EasyExcel 优点坐标依赖读Excel最简单的读的对象写Excel最简单的写的对象最简单的读的监听器填充Excel简单填充(对象)复杂填充(对象和列表)官网:https://easyexcel.opensource.alibaba.com/ EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。…

电脑运行缓慢?4个方法,加速电脑运行!

“我电脑才用了没多久哎&#xff01;怎么突然就变得运行很缓慢了呢&#xff1f;有什么方法可以加速电脑运行速度吗&#xff1f;真的很需要&#xff0c;看看我吧&#xff01;” 电脑的运行速度快会让用户在使用电脑时感觉愉悦&#xff0c;而电脑运行缓慢可能会影响我们的工作效率…

C# 读取pcd点云文件数据

pcd文件有ascii 和二进制格式&#xff0c;ascii可以直接记事本打开&#xff0c;C#可以一行行读。但二进制格式的打开是乱码&#xff0c;如果尝试程序中读取&#xff0c;对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd&#xff0c;无论二进制或ascii都可以正确读取…