2016-10-15 5 views
1

У меня есть огромный набор данных OSM с множеством нулевых столбцов, от которых я хочу избавиться.Как правильно проанализировать итератор в postgresql?

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$ 

имена столбцов, содержащие двоеточие вызвать следующую ошибку:

ERROR: syntax error at or near ":"
LINE 1: ALTER TABLE rail_l DROP COLUMN generator:source

QUERY: ALTER TABLE rail_l DROP COLUMN generator:source
CONTEXT: PL/pgSQL function inline_code_block line 16 at EXECUTE statement
SQL state: 42601

Возможно, вопрос новичка, так как я использовал только для PostgreSQL простых запросов до сих пор, но я бы благодарно принимать какие-либо советы.

ответ

0

Использование format() с спецификатора %I:

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

 Смежные вопросы

  • Нет связанных вопросов^_^