为整个数据库创建常量字符串[英] Create constant string for entire database

本文是小编为大家收集整理的关于为整个数据库创建常量字符串的处理方法,想解了为整个数据库创建常量字符串的问题怎么解决?为整个数据库创建常量字符串问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

考虑到优化的数据库,更改常数的值要比输入20+查询并更改所有内容的相同方面要快.

示例:

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

想象" blablabla'可以是'xxx',我如何使'blablabla'成为按照此模式创建的每个视图的常数?

推荐答案

创建一个微型函数,用作"全局常数":

CREATE OR REPLACE FUNCTION f_my_constant()
  RETURNS text AS
$$SELECT text 'XXX'$$ LANGUAGE sql IMMUTABLE PARALLEL SAFE; -- see below

并在查询中使用该功能而不是'BLABLABLA'.

请确保正确声明数据类型,然后制作函数/a>(因为它是)可以通过大查询进行更好的性能.

在Postgres 9.6或更高版本中添加PARALLEL SAFE,因此不会阻止并行查询计划.该设置在较旧版本中无效.

要更改常数,请通过运行更新的CREATE OR REPLACE FUNCTION语句来替换功能.使用它自动使用查询计划无效,因此重新计划查询.应同时使用安全.变更后开始使用新功能的交易.但是必须手动重建涉及该功能的索引.


另外(尤其是在第9.2页或更高版本中),您可以设置定制选项作为整个集群,给定的DB,给定角色等的"全局常数",并以:

检索值
current_setting('constant.blabla')

一个限制:该值始终是text,可能必须施放为目标类型.

相关:

设置它的许多方法:

本文地址:https://www.itbaoku.cn/post/1763989.html