我还是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的常量?
答案 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
,可能必须转换为目标类型。
相关:
设置它的方法很多: