Zel*_*Elf 3 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'
Run Code Online (Sandbox Code Playgroud)
想象'BLABLABLA'可能是'XXX',我怎么能让'BLABLABLA'成为遵循这种模式创建的每个View的常量?
创建一个小函数,作为"全局常量":
CREATE OR REPLACE FUNCTION f_my_constant()
RETURNS text AS
$$SELECT text 'XXX'$$ LANGUAGE sql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
并使用该功能而不是'BLABLABLA'
在您的查询中.
请务必正确申报的数据类型,使功能IMMUTABLE
与大的查询性能更好.
当您需要更改常量时,请替换该函数,从而使查询计划自动使用它,从而重新计划查询.这对于并发使用来说甚至是安全的.更改后开始的事务使用新函数.
或者(特别是在第9.2或更高版本中),您可以将自定义选项设置为整个集群,给定数据库,给定角色等的"全局常量",并使用以下命令检索值:
current_setting('constant.blabla')
Run Code Online (Sandbox Code Playgroud)
一个限制:值始终text
可能必须转换为目标类型.
有关:
设置它的方法很多: