Est-il possible de remplacer un mot dans une clause WHERE d'une instruction SELECT par une règle (CREATE RULE myrule AS ON SELECT TO mytable
...)?Règle de Postgres pour remplacer le mot dans la clause WHERE
SELECT col1, col2
FROM mytable
WHERE col2 = 1;
devrait devenir
SELECT col1, col2
FROM mytable
WHERE col3 = 1;
La déclaration initiale est émise par un client qui ne permet pas la substitution. Par conséquent, la substitution doit être effectuée du côté de la base de données.
** modifier **
Je ne pourrais pas avoir été assez précis. J'ai besoin d'une substitution de nom de colonne pour ce type de modèle de l'instruction select. La clause WHERE change constamment. Ainsi que le Est-il possible de se référer à l'instruction SELECT en cours dans la règle elle-même?
VENTILEES au strict minimum ce que je dois:
- prendre l'instruction en cours SELECT (si elle a ce certain modèle)
- remplacer « OÙ col2 » avec « Où col3 »
- tassée dans une règle qui peut être déployée sur le côté de la base de données des choses
Vous pouvez rendre le SQL dynamique, où vous passez tous les trois paramètres (plutôt que des littéraux), puis le gérer de sorte que lorsqu'il obtient un paramètre vide, il devient vrai ... par exemple 'where (col1 =? ou ? est nul) et (col2 =? ou? est nul) ' – Hambone
Non, ce n'est pas possible. Si vous pouviez définir la règle, la requête retournera 'col1, col3' au lieu de' col1, col2'. – klin
c'est pourquoi la substitution dans mon exemple inclut le WHERE afin de s'assurer que seul le nom de la table dans la clause WHERE serait remplacé – andehhh