gpt4 book ai didi

PostgreSQL 按服务器版本有条件地执行语句

转载 作者:行者123 更新时间:2023-11-29 11:54:39 25 4
gpt4 key购买 nike

我目前正在编写一些安装程序脚本,根据系统的配置针对不同的数据库类型触发 SQL 文件(网络应用程序支持多个数据库服务器,如 MySQL、MSSQL 和 PostgreSQL)。

其中一种类型是 PostgreSQL。我不熟悉它,我想知道是否可以在定义/填充 SQL 文件中做一个语句,使 SQL 查询以特定的 PostgreSQL 服务器版本为条件。

如何在纯 PGSQL 中有条件地创建一条 SQL 语句,使其仅在版本 9 中执行?命令是:

ALTER DATABASE dbname SET bytea_output='escape';

版本检查是将版本与9进行比较。

最佳答案

Postgres 确实有 version()函数,但是没有 major_vesion()。假设输出字符串总是包含版本号 number(s).number(s).number(s) 你可以将自己的包装器写成:

CREATE OR REPLACE FUNCTION major_version() RETURNS smallint
AS $BODY$
SELECT substring(version() from $$(\d+)\.\d+\.\d+$$)::smallint;
$BODY$ LANGUAGE SQL;

例子:

=> Select major_version();
major_version
---------------
9
(1 row)

然而这里真正的问题是 AFAIK 你 can't在“纯”SQL 中有条件地执行您的命令,您能做的最好的事情就是像这样编写一些存储函数:

CREATE OR REPLACE FUNCTION conditionalInvoke() RETURNS void
AS $BODY$
BEGIN
IF major_version() = 9 THEN
ALTER DATABASE postgres SET bytea_output='escape';
END IF;
RETURN;
END;
$BODY$ LANGUAGE plpgsql;

我认为您应该使用一些脚本语言并用它生成适当的 SQL。

关于PostgreSQL 按服务器版本有条件地执行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com