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.