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

Sql 为整个数据库创建常量字符串,sql,postgresql,constants,Sql,Postgresql,Constants,我还是SQL新手,所以我有一些小问题要解决。 我正在Acqua Data Studio中运行一个Postgres数据库,其中一些查询遵循相同的模型。 这些查询中的一些变量是相同的,但将来可能会更改 考虑到优化的数据库,更改常量的值要比输入20多个查询并在所有查询中更改相同的方面更快 例如: SELECT * FROM Table AS Default_Configs LEFT JOIN Table AS Test_Configs ON Default_Conf

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

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

例如:

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

想象“blabla”可能是“XXX”,我如何使“blabla”成为按照此模式创建的每个视图的常量?

创建一个用作“全局常量”的小函数:

并在查询中使用该函数而不是
'blabla'

请确保正确声明数据类型,并确保(因为它是)在大查询中具有更好的性能

在Postgres 9.6或更高版本中添加了
并行安全
,因此它不会阻止并行查询计划。该设置在旧版本中无效

要更改常量,请通过运行更新的
CREATE或replace function
语句替换函数。使用它自动使查询计划无效,因此将重新计划查询。应能安全地同时使用。更改后开始的事务使用新功能。但涉及该函数的索引必须手动重建


或者(特别是在第9.2页或更高版本中),您可以为整个集群、给定的DB、给定的角色等设置一个“全局常量”,并使用以下方法检索该值:

current_setting('constant.blabla')
一个限制:该值始终为
text
,可能必须强制转换为目标类型

相关的:

有多种设置方法:


感谢您提供的信息!我只使用f_my_constant?@ZeldaElf
f_my_constant()
,而不是“BLABLABLA”。我只是编写了一个微基准来测试不可变函数和单行/单列表之间的性能差异——我非常惊讶于该表在多次运行中的性能优于该函数。我希望在这里把它作为一个问题写下来,但我要提醒大家不要接受公认的智慧。对于函数,您还必须使用DDL而不是DML来更改值,这会带来一些负面影响。所有这些都是正确的,也是意料之中的。函数的开销比从单例表中读取值要大。不过差别很小,特别是如果函数可以内联的话。自Postgres 9.2以来,定制选项将是另一个不错的选择。我在上面添加了指针。可能是
current_setting('constant.blabla')