有一堆表,有40个奇数列,有些表有大约6000万行
在一个表中,有许多列的每一行都是空的,我需要识别这些列,并将它们与非空列(其中至少有一行有数据)分开。
目前还不完全清楚删除空列是否会释放磁盘空间,但通过识别空列和非空列将允许更容易的数据过滤,例如SELECT id,b,c,d FROM t
或构建视图等。
在这个例子中,我需要找到列a / A
create table t (id int, a int, b int, c int, d int);
insert into t (id, a, b, c, d) values
(1, null, 7, 7, 7),
(2, null, 7, 7, null),
(3, null, 7, 7, 7);
select DISTINCT
case when a is null then 'A ' else '' end ||
case when b is null then 'B ' else '' end ||
case when c is null then 'C ' else '' end ||
case when d is null then 'D ' else '' end as null_columns
from t
字符串
返回
null_columns
A
A D
型
这里有一个dbfiddle
我只需要A
1条答案
按热度按时间fkaflof61#
删除包含NULL的列不会释放任何存储空间。删除列永远不会释放PostgreSQL中的存储空间。但无论如何您无法保存任何存储空间,因为NULL列在PostgreSQL中不占用任何空间。
你可以通过计数找到所有NULL的列:
字符串