如何在postgresql中正确解析迭代器?

时间:2016-10-15 19:58:48

标签: postgresql parsing iterator openstreetmap isnull

我有一个巨大的OSM数据集,其中包含许多我想要删除的空列。

DO
$do$
DECLARE
    _column TEXT;
BEGIN
FOR _column  IN
    SELECT attname
    FROM pg_stats where tablename = 'rail_l' 
    and most_common_vals is null
    and most_common_freqs is null
    and histogram_bounds is null
    and correlation is null
    and null_frac = 1
LOOP
    RAISE NOTICE '%',  _column;
    EXECUTE
    'ALTER TABLE rail_l DROP COLUMN ' || _column;
END LOOP;
END
$do$

包含冒号的列名会导致以下错误:

  

错误:语法错误在或附近":"   
LINE 1:ALTER TABLE rail_l DROP COLUMN发生器:源
  
QUERY:ALTER TABLE rail_l DROP COLUMN generator:source   
上下文:PL / pgSQL函数inline_code_block在EXECUTE语句中的第16行   
SQL状态:42601

也许是一个初学者的问题,因为到目前为止我只使用postgresql进行简单的查询,但我很乐意接受任何建议。

1 个答案:

答案 0 :(得分:0)

format()与说明符%I

一起使用
...
LOOP
   RAISE NOTICE '%',  _column;
   EXECUTE format('ALTER TABLE rail_l DROP COLUMN %I', _column);
END LOOP;
...