2010-08-31 4 views
1

Après un changement de schéma db, ce qui était une colonne est maintenant calculé dans une procédure stockée. Est-il possible de rendre cette modification transparente pour les programmes d'application?Requête de réécriture dans PostgreSQL

Alors que lorsqu'un programme envoie une requête comme

SELECT id, 
     value 
    FROM table 

... il obtient plutôt un résultat de

SELECT id, 
     compute_value() AS value 
    FROM table 

Je pensais que je pouvais utiliser une règle, mais il est impossible de créer une règle SELECT sur une table existante.

Donc la seule autre option me semble créer une nouvelle table et une vue avec le nom de l'existant. Lequel, en raison du besoin de déclencheurs INSERT/UPDATE pour la vue est trop compliqué. Ensuite, je préfère mettre à jour toutes les applications client.

+0

Les règles ne sont pas possibles sur SELECT? http://www.postgresql.org/docs/8.4/interactive/sql-createrule.html Jetez un oeil à "événement": L'événement est l'un de SELECT, INSERT, UPDATE, ou DELETE. – DrColossos

+0

Je voulais "SELECT règle sur la table existante". C'est à dire. vous avez une table 'foo' et vous voulez la règle SELECT dessus. – jira

Répondre

2

Si vous savez que vous souhaitez renvoyer une valeur, vous utilisez une fonction plutôt qu'une procédure stockée. Ensuite, vous souhaitez référencer comme:

SELECT id, 
     your_function_name(parameter) AS value 
    FROM TABLE 

Il y a an example under "SQL Functions on Composite Types" in the documentation.

Créer une vue en utilisant l'instruction ci-dessus est idéal si votre application a besoin de la valeur calculée en permanence, sinon je ne m'en soucierais pas.

+0

Oui, une vue est la voie à suivre. –

Questions connexes