PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sélectionnez des colonnes avec des noms de colonne particuliers dans PostgreSQL

column est un mot réservé . Vous ne pouvez pas l'utiliser comme identifiant à moins de le mettre entre guillemets. Comme :"column" .

Cela ne signifie pas pour autant que vous devriez le faire. N'utilisez simplement pas de mots réservés comme identifiants. Jamais.

Pour ...

sélectionnez une liste de colonnes avec 2010 dans leur nom :

.. vous pouvez utiliser cette fonction pour construire dynamiquement la commande SQL à partir de la table du catalogue système 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;

Appel :

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

Renvoie quelque chose comme :

SELECT foo2010, bar2010_id, FROM weather_data;

Vous ne pouvez pas rendre cela entièrement dynamique, car le type de retour est inconnu jusqu'à ce que nous construisions réellement la requête.