PLpgSQL 函数查找给定表中仅包含 NULL 值的列

2023-12-31

我们必须找到只有 NULL 值的表的列。我们正在尝试构建一个 plpgsql 函数,它接受表的名称并返回此类列的列表。

如何创建这样的函数?

我们正在使用 PgAdmin 1.16。


可以查询catalog表pg_attribute http://www.postgresql.org/docs/current/interactive/catalog-pg-attribute.html获取未定义的列的列表NOT NULL因此can hold NULL values:

SELECT quote_ident(attname) AS column_can_be_null
FROM   pg_attribute
WHERE  attrelid = 'tbl'::regclass -- valid, visible table name 
AND    attnum >= 1                -- exclude tableoid & friends
AND    NOT attisdropped           -- exclude dropped columns
AND    NOT attnotnull             -- exclude columns defined NOT NULL!
ORDER  BY attnum;

Where tbl是您的(可选模式限定的)表名。

并没有说该列中有任何实际的 NULL 值。您必须测试每一列。像这样:

具有 plpgsql 功能的完全自动化

CREATE OR REPLACE FUNCTION f_all_null_columns_of_tbl(_tbl regclass)
  RETURNS SETOF text AS
$func$
DECLARE
   _row_ct  bigint;        -- count rows in table $1
   _sql     text;          -- SQL string to test for NULL values
   _cols    text[];        -- array of candidate column names
   _nulls   bool[];        -- array of test results
BEGIN

EXECUTE 'SELECT count(*) FROM ' || _tbl
INTO _row_ct;

IF _row_ct = 0 THEN
   RAISE EXCEPTION 'Table % has no rows!', _tbl;  -- pointless for empty table
ELSE
   RAISE NOTICE '% rows in table %.', _row_ct, _tbl; 
END IF;

SELECT INTO _sql, _cols
      'SELECT ARRAY[' || string_agg('bool_and(' || col || ' IS NULL)', ', ')
       || '] FROM ' || _tbl
    , array_agg(col)
FROM  (
   SELECT quote_ident(attname) AS col
   FROM   pg_attribute
   WHERE  attrelid = _tbl            -- valid, visible table name 
   AND    attnum >= 1                -- exclude tableoid & friends
   AND    NOT attisdropped           -- exclude dropped columns
   AND    NOT attnotnull             -- exclude columns defined NOT NULL!
   ORDER  BY attnum
   ) sub;

EXECUTE _sql INTO _nulls;

FOR i IN 1 .. array_upper(_cols, 1)
LOOP
   IF _nulls[i] THEN                 -- column is NULL in all rows
      RETURN NEXT _cols[i];
   END IF;
END LOOP;

RETURN;
END
$func$ LANGUAGE plpgsql;

Call:

SELECT f_all_null_columns_of_tbl('my_schema.my_table');

使用 Postgres 9.1 和 9.3 进行测试。
这使用了许多高级 plpgsql 功能。

SQL 小提琴。 http://sqlfiddle.com/#!15/ec8ed/1

相关答案使用现代语法构建 SQL 代码并执行它:

  • 将空字符串替换为 null 值 https://stackoverflow.com/questions/10621897/replace-blank-spaces-with-null-values/10686513#10686513

关于遍历记录:

  • 循环记录的列 https://stackoverflow.com/questions/13065774/pl-pgsql-loop-through-columns-of-record/13079081#13079081
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PLpgSQL 函数查找给定表中仅包含 NULL 值的列 的相关文章

随机推荐

  • Java - 如何防止 WindowClosing 实际关闭窗口

    对于大多数人来说 我似乎遇到了相反的问题 我有以下非常标准的代码来查看用户是否想在关闭窗口之前进行一些保存 frame setDefaultCloseOperation WindowConstants DO NOTHING ON CLOSE
  • R arulesSequences 查找序列支持哪些模式

    我遇到了麻烦arulesSequencesR 中的库 我有一个带有时间信息的事务数据集 在这里 我们使用默认的zaki数据集 我用黑桃 cspade函数 来查找数据集中的频繁子序列 library arulesSequences data
  • Jquery .toggle 替换代码

    我的网站上有一个按钮 可以在文章的宽布局和窄布局之间切换 从 JQuery 1 9 开始 由于toggle 的弃用 这已经不起作用了 我不是 JS 方面的高手 也没有设法从这里的各种问题中拼凑出答案 所以如果可能的话 希望有人看看我的具体案
  • 通过 Tinkerpop 使用特定模型将(数百万行)数据导入 Janusgraph 的最佳方法

    刚开始使用 Tinkerpop 和 Janusgraph 我正在尝试根据文档来解决这个问题 我有三个数据集 每个数据集包含大约 2000 万行 csv 文件 有一个特定的模型 其中的变量和行需要连接 例如什么是顶点 什么是标签 什么是边 等
  • 将 JSON 数据映射到具有特定视图模型类型的 Knockout observableArray

    有没有办法将 JSON 数据对象映射到可观察数组 然后依次将可观察数组的每个项目初始化为特定类型的视图模型 我已经查看了所有淘汰赛的文档以及淘汰赛和映射示例 但我找不到任何适合我所追求的答案 所以 我有以下 JSON 数据 var data
  • MATLAB 中的双 for 循环,存储信息

    我在 MATLAB 中有两个 for 循环 其中一个 for 循环导致不同的变量被插入到模型中 这些变量是 43 然后我有 5 个地平线 所以我对模型进行了 215 次估计 我的问题是我想将其存储在 215x5 矩阵中 我有 x5 的原因是
  • LINQ 中的动态查询

    如果我有包含字段的 Customer 类 如何为 Linq 编写动态查询 string name string address int phoneno 我必须根据类似于给出的信息进行查询 query string Empty if stri
  • 数据表服务器端的内连接4表

    我有用于在数据表中显示数据的代码 php 但是这个 php 服务器端 不起作用 什么数据表不能使用内连接 如果可以 如何修复我的代码 再说一遍 如何使用内连接在数据表中主动搜索数据 非常感谢
  • 尝试进一步了解OCaml的接口/模块

    我理解 OCaml 中有以下概念interfaces and module 我现在明白如何使用它们了 然而 我不明白的是如何充分利用它们 例如 在 Java 中 假设我们有一个接口Map我们还有Hashtable and HashMap实施
  • 使用嵌套列表进行分组和求和

    我有嵌套列表 我正在尝试使用 java 流和收集器进行分组和求和以获得所需的结果 这样我就无法循环多个SubAccounts 我必须使用 for 循环或其他一些逻辑 我想使用streams api来实现 有没有可能 Map
  • 在 iOS 7 中的另一个 ViewController 上显示清晰的彩色 ViewController [重复]

    这个问题在这里已经有答案了 在 iOS 7 之前 根据这个流行的 Stackoverflow问题 https stackoverflow com questions 11236367 display clearcolor uiviewcon
  • 当 JLabel 的文本发生变化时,如何阻止 JLabel 改变其大小?

    我在代码中生成一些 JComponent 并使用 GridBag 布局来排列它们 我的布局由 12 行和 3 列组成 每行由一个 JSlider 一个 JCheckBox 和一个 JLabel 组成 这是我用来生成 UI 的代码 final
  • 如何使用纯 JavaScript 将 GBK 转换为 UTF8?

    我想从其他网站加载一些文本 内容是GBK编码的 但我的网站是UTF8 有没有办法可以将这些GBK文本转换为UTF8进行显示 由于某些原因 我只能使用 JavaScript 来实现此目的 http www 1kjs com lib widge
  • 上传多个文件pdo

    如何使用此脚本上传数据库中的多个文件 我想让输入文件和数据库不需要 你怎么认为 脚本是否受保护 这是我的 php pdo 脚本 file FILES file fileName FILES file name fileTmpName FIL
  • 如何使用 ESLint 的新 Flat-config 正确配置解析器和插件?

    如何使用新的 Flat Config 系统配置 ESLint aka eslint config js file 这样它就可以与 TypeScript ESLint ESLint plugin 和 TypeScript 解析器一起使用吗 E
  • 如何使用 StreamingResponse 将多个图像从 FastAPI 后端发送到 JavaScript 前端?

    我有一个 FastAPI 端点 image ocr接受 处理并返回多个图像作为StreamingResponse async def streamer images for image in images Bytes image bytes
  • 在 linq toEntity 中使用自定义方法

    我有一个Person我的数据库中的表有NationalId场地 有没有办法让所有的人都加载均匀NationalId using Ef code first and Linq to entities 不加载全部Person是为了记忆吗 像这样
  • iOS 7 UItableview 单元格背景视图

    我使用图像视图作为表格视图单元格背景视图 当我在 xcode 4 x 中编译源代码时 它工作正常 即在 iOS 6 x 和 7 0 中都工作正常 但是当我在 xcode 5 0 中编译源代码时 背景图像视图没有出现在 iOS 7 中 知道吗
  • 使用 PHP 和 MySQL 存储用户图像的最佳方式是什么?

    我想知道使用 PHP 和 MySQL 存储用户上传的图像 如头像等 的最佳方式是什么 我应该从哪里开始 有关于这方面的好文章吗 最好 取决于您的目标是什么 存储用户上传图像的两种主要方法是将二进制内容作为 BLOB 放入数据库中 或者将图像
  • PLpgSQL 函数查找给定表中仅包含 NULL 值的列

    我们必须找到只有 NULL 值的表的列 我们正在尝试构建一个 plpgsql 函数 它接受表的名称并返回此类列的列表 如何创建这样的函数 我们正在使用 PgAdmin 1 16 可以查询catalog表pg attribute http w