一、利用表数据信息查询表和字段信息

(一)从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-根据模式名和字段名查询有该字段的所有表信息【通过表元数据信息和函数实现】的更多相关文章

  1. 【转发】在SQL Server中通过字段值查询存储该字段的表

    -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.     -- Purpose: To search all colu ...

  2. 查询多表集合(union)、查询时建临时字段、查询时给字段设置默认值

    () UNION () UNION (select i.create_time as time,i.investment_amount as amount,i.invest_state as stat ...

  3. 什么是分析型数据库PostgreSQL版

    分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...

  4. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息

    1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息 有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段 ...

  5. Mybatis-Plus中使用max、sum聚合函数、只查询指定字段、查询语句多个OR处理

    聚合函数查询 可以使用以下方法 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select(" I ...

  6. jdbc链接数据库,获取表名,字段名和数据

    import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import  ...

  7. mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题

    导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...

  8. Sqlserver列出所有数据库名,表名,字段名

    Sqlserver列出所有数据库名,表名,字段名   1.获取所有数据库名:   ? 1 SELECT Name FROM Master..SysDatabases ORDER BY Name   注 ...

  9. [SQL]获取所有数据库名、获取数据库中表名、获取表中的字段名

    --()获取所有数据库名: Select Name FROM Master..SysDatabases order by Name --()获取所有表名 --XType=''U'':表示所有用户表; ...

  10. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

随机推荐

  1. 8. Ceph 基础篇 - 运维常用操作

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485300&idx=1&sn=aacff9f7 ...

  2. .NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)

    介绍 基本 Yarp 示例显示从 appsettings.json 加载的代理配置.相反,代理配置可以从您选择的源以编程方式加载.您可以通过提供几个实现 IProxyConfigProvider 和 ...

  3. SpringBoot实战派读书笔记---响应式编程

    1.什么是WebFlux? WebFlux不需要Servlet API,在完全异步且无阻塞,并通过Reactor项目实现了Reactor Streams规范. WebFlux可以在资源有限的情况下提高 ...

  4. 汇编指令:lea

    lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,l ...

  5. 使用开源计算引擎提升Excel格式文件处理效率

    对Excel进行解析\生成\查询\计算等处理是Java下较常见的任务,但Excel的文件格式很复杂,自行编码读写太困难,有了POI\EasyExcel\JExcel等类库就方便多了,其中POI最为出色 ...

  6. 齐博x1标签实例:标签设置取组图不存在就取内容中的图片

    对于CMS或者是其它,使用下面的代码 <div class="morepic"> {volist name=":getArray($pics=$rs.picu ...

  7. 齐博x1小程序集群必须带上固定的标志

    小程序集群的也类似登录接口一样,需要带上特殊的标志.建议是在所有请求的头部header 加上 wxappid 如下图所示,跟登录标志 token 并列在一起. 如果不方便修改头部header 请求的时 ...

  8. 11.mixins混合类

      一.混合类(mixins) 使用基于类的视图,最大的优势之一就创建可复用的代码 我们编写的非常类似的代码,可以抽象出来,将这部分代码放到mixin类系列中,然后作为父类提供子类继承使用 from ...

  9. virtualenv +virtualenvwrapper

    一.虚拟环境virtualenv 1.安装:pip3 install virtualenv 2.创建虚拟环境:virtualenv venv #venv为虚拟环境目录名,目录名自定义 #virtual ...

  10. 基于docker安装jumpserver

    以下配置均在一台ubuntu上实现 # 生成宿主机Mysql配置文件,便于docker内容器使用 [root@ubuntu2004 ~]#mkdir -p /etc/mysql/mysql.conf. ...