2010-08-31 93 views
1

数据库模式更改后,现在在存储过程中计算了一列。是否有可能为应用程序进行无缝改变?在PostgreSQL中重写查询

因此,当一个程序发送类似

SELECT id, 
     value 
    FROM table 

查询......它,而不是得到的

SELECT id, 
     compute_value() AS value 
    FROM table 

因此我想我可以使用规则,但它是不可能的在现有表上创建SELECT规则。

因此,我认为唯一的选择是创建一个新的表格和一个现有名称的视图。其中,因为需要对视图进行INSERT/UPDATE触发器太复杂。那么我宁愿更新所有的客户端应用程序。

+0

规则在'SELECT'上是不可能的? http://www.postgresql.org/docs/8.4/interactive/sql-createrule.html查看“event”:事件是SELECT,INSERT,UPDATE或DELETE之一。 – DrColossos 2010-09-02 12:50:39

+0

我想要“现有表格上的SELECT规则”。 IE浏览器。你有一个'富'表,你想要它的SELECT规则。 – jira 2010-09-10 12:40:37

回答

2

如果你知道你想返回值,你使用一个函数而不是存储过程。然后你会参考它:

SELECT id, 
     your_function_name(parameter) AS value 
    FROM TABLE 

an example under "SQL Functions on Composite Types" in the documentation

使用上述语句创建视图是理想的,如果您的应用程序需要不断计算的值,否则我不会打扰。

+0

是的,一个视图是要走的路。 – 2010-09-01 05:48:21