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;BEGINWHILE sTempChd is not null loopif 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 VOLATILECOST 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 父子建表查询所有的子数据-利用自定义函数查询》

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

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

相关文章

算法修炼Day51|● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

LeetCode:309.最佳买卖股票时机含冷冻期 309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 1.思路 初始化dp[i][j]数组&#xff0c;表示第i天的最大利润为dp[i][j]. 精确的定义状态是个难点&#xff0c;可以定义四种状态&#xff1a;持有股票&#…

特斯拉Model 3的七年狂飙

‍ 作者 | 张祥威 编辑 | 德新 发布一周拿下32万张订单&#xff0c;之后用时五年&#xff0c;交付量突破100万辆。粗略计算&#xff0c;自2016年发布至今&#xff0c;特斯拉Model 3已交付超150万辆。 放眼新能源赛道&#xff0c;如此战绩 别无二家。 Model 3踩中纯电动车的…

常用的电参数

电参数根据电流的特点可以分为直流电参数和交流电参数&#xff0c;在电参数中有些是可以通过电参数表测得&#xff0c;有些参数则为通过测得的参数计算而来。 一、电参数 1.1 直接可测电参数 ——瞬时电压值 ——瞬时电流值 n——采样点数 f——频率 time——时间 其中&…

go里面关于超时的设计

设想一下你在接收源源不断的数据&#xff0c;如果有700ms没有收到&#xff0c;则认为是一个超时&#xff0c;需要做出处理。 逻辑上可以设计一个grouting,里面放一个通道&#xff0c;每收到一条数据进行相应处理。通道中夹杂一个timer定时器的处理&#xff0c;若通道在700ms内…

微服务中间件--Eureka注册中心

Eureka注册中心 a.eureka原理分析b.搭建eureka服务c.服务注册d.服务发现 a.eureka原理分析 1.每个服务启动时&#xff0c;将自动在eureka中注册服务信息 (每个服务每隔30秒发送一次的心跳续约&#xff0c;当某个服务没有发送时&#xff0c;eurekaServer将自动剔除该服务&#x…

基于web的服装商城系统java网上购物商店jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的服装商城系统 系统有1权限&#xff1a;前台…

【Java转Go】快速上手学习笔记(四)之基础篇三

目录 泛型内置泛型的使用切片泛型和泛型函数map泛型泛型约束泛型完整代码 接口反射协程特点WaitGroupgoroutine的调度模型&#xff1a;MPG模型 channel介绍语法&#xff1a;举例&#xff1a;channel遍历基本使用和协程一起使用案例一案例二 select...casemain.go 完整代码 文件…

uni-app + SpringBoot +stomp 支持websocket 打包app

文章目录 一、概述&#xff1a;二、配置&#xff1a;1. 后端配置2. uni-app(app端)3. 使用 一、概述&#xff1a; websocket 协议是在http 协议的基础上的升级&#xff0c;通过一次http 请求建立长连接&#xff0c;转而变为TCP 的全双工通信&#xff1b;而http 协议是一问一答…

第5天----单词替换(C++replace()函数)

当一句话中出现错误的单词时&#xff0c;你是否想快速将它替换为你想要的&#xff0c;接下来的这篇文章&#xff0c;将带你了解什么是单词替换。 一、基本知识&#xff1a; 1. string::replace()函数 C <string>库中的replace()函数是用于替换字符串中的特定字符或子字…

Android 13像Settings一样获取热点和网络共享

一.背景 由于客户定制的Settings里面需要获取到热点和网络共享状态,所以需要实现此功能。 目录 一.背景 二.前提条件 三.调用api 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍…

Android AlarmManager设置闹钟

官网镇楼&#xff1a;设置重复闹铃时间 闹钟具有以下特征&#xff1a; 它们可让您按设定的时间和/或间隔触发 intent。您可以将它们与广播接收器结合使用&#xff0c;以启动服务以及执行其他操作。它们在应用外部运行&#xff0c;因此即使应用未运行&#xff0c;或设备本身处…

【音视频】基于webrtc的聊天室的设计

目录 术语 webrtc建连流程 系统整体架构 信令服务器房间状态管理 用户加入房间流程 用户加入房间并推流&#xff1a; 其他用户订阅此用户流 用户加入房间并订阅房间其他所有用户 用户退出房间流程 平行集群模式​编辑 第一阶段demo 设计 参考文章 术语 sdp: 在webrt…

第一篇:编写 Hello World 程序

编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用&#xff0c;但却包含了一个应用程序的基本要素&#xff0c;所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目&#xff0c;从而…

在Hive/Spark上执行TPC-DS基准测试 (PARQUET格式)

在上一篇文章:《在Hive/Spark上运行执行TPC-DS基准测试 (ORC和TEXT格式)》中,我们介绍了如何使用 hive-testbench 在Hive/Spark上执行TPC-DS基准测试,同时也指出了该项目不支持parquet格式。 如果我们想要生成parquet格式的测试数据,就需要使用其他工具了。本文选择使用另…

【C语言】三子棋游戏——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将结合之前的知识来实现 三子棋游戏。 目录&#xff1a; &#x1f31f;思路框架&#xff1a;测试游戏 &#x1f31f…

Haproxy搭建web集群

Haproxy概念 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大&#xff08;并发达1w以上&#xff09;web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得…

Teach LLMs to Personalize – An Approach inspired by Writing Education

本文也是LLM系列的文章&#xff0c;针对《Teach LLMs to Personalize – An Approach inspired by Writing Education》的翻译。 教LLM个性化——一种受写作教育启发的方法 摘要1 引言2 相关工作3 问题形式化4 方法概述5 个性化文本生成5.1 检索5.2 排序5.3 摘要5.4 综合5.5 个…

qt checbox设置不可用,快捷方式,选中,取消事件

QGridLayout *layout new QGridLayout;box new QCheckBox();box->setText("复选框");box1 new QCheckBox();box1->setText("&C复选框1");box1->setDisabled(true);layout->addWidget(box,0,0);layout->addWidget(box1,0,1);connect(bo…

Android Studio实现解析HTML获取json,解析json图片URL,将URL存到list,进行瀑布流展示

目录 效果build.gradle&#xff08;app&#xff09;添加的依赖&#xff08;用不上的可以不加&#xff09;AndroidManifest.xml错误activity_main.xmlitem_image.xmlMainActivityImage适配器ImageModel 接收图片URL 效果 build.gradle&#xff08;app&#xff09;添加的依赖&…

基于Spring Boot的餐厅订餐网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的餐厅订餐网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springbo…