为整个数据库创建常量字符串

时间:2014-03-26 14:09:36

标签: sql postgresql constants

我还是SQL新手,所以我要解决一些小问题。 我在Acqua Data Studio中运行Postgres数据库,其中一些查询遵循相同的模型 这些查询中的一些变量是相同的,但将来可能会发生变化......

考虑到优化数据库,更改常量的值比输入20多个查询更快,并在所有查询中更改相同的方面。

示例:

SELECT *
FROM Table AS Default_Configs      
    LEFT JOIN Table AS Test_Configs
        ON Default_Configs.Column1 = 'BLABLABLA'

想象'BLABLABLA'可能是'XXX',我怎么能让'BLABLABLA'成为遵循这种模式创建的每个View的常量?

1 个答案:

答案 0 :(得分:6)

创建一个微小的函数,用作"全局常量":

CREATE OR REPLACE FUNCTION f_my_constant()
  RETURNS text AS
$$SELECT text 'XXX'$$ LANGUAGE sql IMMUTABLE;

在查询中使用该功能代替'BLABLABLA'

请务必正确声明数据类型,并使用function IMMUTABLE以获得更好的大查询效果。

当您需要更改常量时,请替换该函数,从而自动使用它来使查询计划无效,以便重新计划查询。这对于并发使用来说甚至是安全的。更改后开始的事务使用新函数。


或者(特别是在第9.2页或更高版本中),您可以将Customized Option设置为"全局常量"对于整个集群,给定的DB,给定的角色等,并使用以下命令检索值:

current_setting('constant.blabla')

一个限制:值始终为text,可能必须转换为目标类型。

相关:

设置它的方法很多: