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 父子建表查询所有的子数据-利用自定义函数查询》

猜你喜欢

转载自blog.csdn.net/weixin_40986713/article/details/119913345
今日推荐