使 postgres 忽略当前版本不支持的声明

贾斯汀·马罗兹

背景

针对许多类似的PostgreSQL 实例运行相同任务的服务大多数环境都在 10 版上,但有些在 9 版上。至少在短期内升级它们不是一种选择。

问题

为了提高性能,我们使用了 PostgreSQL 10 特性CREATE STATISTICS它在 v10 上的环境中运行良好,但在 v9 上不受支持。

处理它的一种方法可能是复制每个使用 的脚本,CREATE STATISTICS在没有这些语句的情况下维护它的副本,并选择在应用程序级别运行哪个脚本。我想避免它,因为它有很多重复的代码需要维护。

如果脚本找到合适的版本(下面的代码),我试图通过仅创建统计信息来欺骗它,但在 v9 上它仍然被认为是语法错误。

DO $$

-- server_version_num is a version number melted to an integer:
--  9.6.6 -> 09.06.06 ->  90606
-- 10.0.1 -> 10.00.01 -> 100001
DECLARE pg_version int := current_setting('server_version_num');

BEGIN

IF pg_version >= 100000 THEN
  CREATE STATISTICS table_1_related_col_group_a (NDISTINCT)
  ON col_a1, col_a2
  FROM schema_1.table_1;

  CREATE STATISTICS table_2_related_col_group_b (NDISTINCT)
  ON col_b1, col_b2, col_b3
  FROM schema_1.table_2;
END IF;

END $$ LANGUAGE plpgsql;

问题

有没有办法运行包含不受支持的语句的脚本,CREATE STATISTICS而无需关闭 postgres 9?

404

使用动态 SQL。除非执行,否则不会对其进行评估。

DO $$

-- server_version_num is a version number melted to an integer:
--  9.6.6 -> 09.06.06 ->  90606
-- 10.0.1 -> 10.00.01 -> 100001
DECLARE pg_version int := current_setting('server_version_num');

BEGIN

IF pg_version >= 100000 THEN
  EXECUTE 'CREATE STATISTICS table_1_related_col_group_a (NDISTINCT)
           ON col_a1, col_a2
           FROM schema_1.table_1;

           CREATE STATISTICS table_2_related_col_group_b (NDISTINCT)
           ON col_b1, col_b2, col_b3
           FROM schema_1.table_2;';
END IF;

END $$ LANGUAGE plpgsql;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PhpStorm“当前的JavaScript版本不支持定义”

WebStorm“当前的JavaScript版本不支持定义”

当前的JavaScript版本不支持解构分配

Postgres不支持TypeORM数组吗?

Mysql 当前版本不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

PHPStorm中的当前Javascript版本不支持速记属性名称

当前的javascript版本不支持字符串模板

PhpStorm 中的当前 JavaScript 版本不支持 Let 定义

当前浏览器版本不支持机器人框架

最新的Eclipse Oxygen版本不支持CVS插件

缺少工件-版本不支持Websphere Mq 7.0

错误:“此协议版本不支持加密方法”

最新的Autofac版本不支持.Net Framework 4.6.2

matlab 版本不支持某些功能

雨果错误-当前主题不支持当前版本

4.1以下版本不支持通知构建器。如何指定仅在4.1和更高版本上使用通知生成器,而忽略4.1以下的版本

使用nodejs连接到Postgres数据库时出错,导致pg.js“不支持方言postgres”

PHP Postgres PDO驱动程序不支持准备好的语句吗?

当前版本的Android Gradle插件不支持按需配置

Postgres,pg_dump版本不匹配

不支持沙丘版本

堆栈不支持的版本

GLSL不支持的版本

不支持PHP版本

Teradata createClob:此版本不支持该功能。这是错误还是功能?

错误:MSB4803:MSBuild的.NET Core版本不支持任务“ ResolveComReference”

Three.js v74及更高版本不支持LatheGeometry

6.0之前的iOS版本不支持-fembed-bitcode

由于 php 版本不同,magento 2 和 laravel 不支持