PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Seleziona colonne con nomi di colonne particolari in PostgreSQL

column è una parola riservata . Non puoi usarlo come identificatore a meno che non lo citi due volte. Come:"column" .

Non significa che dovresti, però. Basta non usare parole riservate come identificatori. Mai.

A ...

seleziona un elenco di colonne con 2010 nel nome:

.. puoi usare questa funzione per costruire il comando SQL in modo dinamico dalla tabella del catalogo di sistema pg_attribute :

CREATE OR REPLACE FUNCTION f_build_select(_tbl regclass, _pattern text)
  RETURNS text AS
$func$
    SELECT format('SELECT %s FROM %s'
                 , string_agg(quote_ident(attname), ', ')
                 , $1)
    FROM   pg_attribute 
    WHERE  attrelid = $1
    AND    attname LIKE ('%' || $2 || '%')
    AND    NOT attisdropped  -- no dropped (dead) columns
    AND    attnum > 0;       -- no system columns
$func$ LANGUAGE sql;

Chiama:

SELECT f_build_select('weather_data', '2010');

Restituisce qualcosa come:

SELECT foo2010, bar2010_id, FROM weather_data;

Non puoi renderlo completamente dinamico, perché il tipo restituito è sconosciuto fino a quando non costruiamo effettivamente la query.