【数据库】PostgreSQL/PgSql-根据模式名和字段名查询有该字段的所有表信息【通过表元数据信息和函数实现】
一、利用表数据信息查询表和字段信息
(一)从pg_tables中查询表信息
select
tablename
from pg_tables
where
schemaname='ap'
and
tablename SIMILAR TO 'dwd_[a-z,_]+_[0-9]+'
(二)从pg_class和pg_attribute根据指定的表名查询字段信息
SELECT
C.relname,
A.attname AS NAME,
A.attnotnull AS NOTNULL,
format_type ( A.atttypid, A.atttypmod ) AS TYPE,
col_description ( A.attrelid, A.attnum ) AS COMMENT
FROM
pg_class AS C,
pg_attribute AS A
WHERE
C.relname = 'table_name'
AND A.attrelid = C.oid
AND A.attnum > 0
二、函数创建步骤
(一)创建函数
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema()
RETURNS "pg_catalog"."void" AS $BODY$
DECLARE
loop_index integer;
BEGIN
loop_index=1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
(二)函数调用
select ods.find_table_by_column_and_schema(10);
(三) 输入参数
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema(in_param_schema integer)
RETURNS "pg_catalog"."void" AS $BODY$
DECLARE
loop_index integer;
BEGIN
loop_index=1;
loop_index=loop_index+in_param_schema;
RAISE notice '表名为:%',loop_index;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
(四)删除已创建的函数
DROP FUNCTION find_table_by_column_and_schema(integer)
(五)输出及打印参数
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema(
in_param_schema integer,
OUT out_table_list integer)
RETURNS integer AS $BODY$
DECLARE
loop_index integer;
BEGIN
loop_index=1;
loop_index=loop_index+in_param_schema;
RAISE notice '表名为:%',loop_index;
out_table_list=loop_index;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
(六)测试数组
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema(
in_param_schema integer,
OUT out_table_list character varying[])
RETURNS character varying[] AS $BODY$
DECLARE
loop_index integer;
BEGIN
loop_index=1;
loop_index=loop_index+in_param_schema;
RAISE notice '表名为:%',loop_index;
out_table_list[0]=loop_index;
out_table_list[1]=loop_index+1;
out_table_list[2]=concat(out_table_list[1],cast(1 as character varying));
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
问题:character varying[]和character、varchar的区别
(七)测试与SQL交互
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema(
in_param_schema integer,
OUT out_table_list character varying[])
RETURNS character varying[] AS $BODY$
DECLARE
loop_index integer;
BEGIN
loop_index=1;
loop_index=loop_index+in_param_schema;
RAISE notice '表名为:%',loop_index;
out_table_list[0]=loop_index;
out_table_list[1]=loop_index+1;
out_table_list[2]=(
select count(*) from ap.fact_ito
);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
三、最终结果
(一)函数内容
CREATE OR REPLACE FUNCTION ods.find_table_by_column_and_schema(
in_param_schema varchar,
in_param_column varchar,
OUT out_table_list character varying[])
RETURNS character varying[]
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
loop_index integer;
row_record VARCHAR(200);
arr_length integer;
BEGIN
loop_index = 1;
FOR row_record IN(
select
tablename
from pg_tables
where
schemaname=in_param_schema
) LOOP
IF (SELECT count(*)
FROM (SELECT
C.relname,
A.attname AS column_name,
A.attnotnull AS NOTNULL,
format_type ( A.atttypid, A.atttypmod ) AS TYPE,
col_description ( A.attrelid, A.attnum ) AS COMMENT
FROM
pg_class AS C,
pg_attribute AS A
WHERE
C.relname = row_record
AND A.attrelid = C.oid
AND A.attnum > 0
) REF
where column_name=in_param_column)>0
THEN
out_table_list[loop_index]=row_record;
loop_index=loop_index+1;
END IF;
END LOOP;
END;
$BODY$;
(二)调用方式
select ods.find_table_by_column_and_schema('ods','fbillno');
【数据库】PostgreSQL/PgSql-根据模式名和字段名查询有该字段的所有表信息【通过表元数据信息和函数实现】的更多相关文章
- 【转发】在SQL Server中通过字段值查询存储该字段的表
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved. -- Purpose: To search all colu ...
- 查询多表集合(union)、查询时建临时字段、查询时给字段设置默认值
() UNION () UNION (select i.create_time as time,i.investment_amount as amount,i.invest_state as stat ...
- 什么是分析型数据库PostgreSQL版
分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...
- mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息
1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息 有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段 ...
- Mybatis-Plus中使用max、sum聚合函数、只查询指定字段、查询语句多个OR处理
聚合函数查询 可以使用以下方法 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select(" I ...
- jdbc链接数据库,获取表名,字段名和数据
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import ...
- mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题
导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...
- Sqlserver列出所有数据库名,表名,字段名
Sqlserver列出所有数据库名,表名,字段名 1.获取所有数据库名: ? 1 SELECT Name FROM Master..SysDatabases ORDER BY Name 注 ...
- [SQL]获取所有数据库名、获取数据库中表名、获取表中的字段名
--()获取所有数据库名: Select Name FROM Master..SysDatabases order by Name --()获取所有表名 --XType=''U'':表示所有用户表; ...
- 获取sqlserver数据库中所有库、表、字段名的方法
获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...
随机推荐
- 彻底掌握Makefile(一)
彻底掌握Makefile(一) 介绍 makefile就是一个可以被make命令解析的文件,他定义了一系列编译的规则,帮助我们更加方便.简洁的去完成编译的过程.在一个大工程当中我们会有各种各样的文件, ...
- 使用SpringCloud实现的微服务软件开发部署到Linux上占用内存过大问题解决办法
问题描述 最近上线的一个使用JAVA的Spring Cloud开发的ERP软件,部署上线时发现很严重的内存资源占用过高问题,而实际上开发测试并没有很大的访问量,甚至却出现了服务器无法正常访问的现象. ...
- Elasticsearch 主从同步之跨集群复制
文章转载自:https://mp.weixin.qq.com/s/alHHxXont6XFm_m9PfsGfw 1.什么是跨集群复制? 跨集群复制(Cross-cluster replication, ...
- 第四章:Django表单 - 3:Django表单字段汇总
Field.clean(value)[source] 虽然表单字段的Field类主要使用在Form类中,但也可以直接实例化它们来使用,以便更好地了解它们是如何工作的.每个Field的实例都有一个cle ...
- 定制开发 ERP 的优势有哪些?
定制开发ERP对企业而言是把双刃剑,成败难以把握.定制开发ERP理论上来讲是最贴合企业业务需求的,因为它是按企业需求定制,看上去似乎没什么毛病,但ERP是专业性极强的业务逻辑极其复杂的软件系统,有两个 ...
- SpringBoot课程学习(三)
一.YAML格式的基本语法 (1)格式: 大小写敏感 数据值前边必须有空格,作为分隔符 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层 ...
- Hbase之shell基本操作
一.系统命令 启动hbase Shell ./bin/hbase shell 获取帮助 help 查询服务器状态 status 查询hbase版本 version 查询表 list 获取表描述 des ...
- React魔法堂:size-sensor源码略读
前言 echarts-for-react在对echarts进行轻量级封装的基础上,额外提供图表尺寸自适应容器尺寸的这小而实用的功能,而这功能的背后就是本文想介绍的size-sensor了. 源码介绍 ...
- python基础爬虫,翻译爬虫,小说爬虫
基础爬虫: # -*- coding: utf-8 -*- import requests url = 'https://www.baidu.com' # 注释1 headers = { # 注释2 ...
- javascript编程单线程之同步模式
javascript编程单线程之同步模式 主流的js 环境都是单线程吗模式执行js 代码, js采用为单线程的原因与最开始设计初衷有关,最早是运行在浏览器端的脚本语言,目的是为了实现页面上的动态交互, ...