2016-10-15 1 views
1

J'ai un énorme ensemble de données OSM avec beaucoup de colonnes nulles dont je veux me débarrasser.Comment analyser correctement un itérateur dans 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$ 

Les noms des colonnes contenant deux points font l'erreur suivante:

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

Peut-être un débutant question puisque je postgresql seulement pour les requêtes simples à ce jour mais je heureusement prendre des conseils.

Répondre

0

Utilisez format() avec le spécificateur %I:

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