在PostgreSQL回归套件中添加特定于语言环境的测试是一个好主意吗?

在PostgreSQL回归套件中添加特定于语言环境的测试是一个好主意吗?,sql,database,postgresql,internationalization,locale,Sql,Database,Postgresql,Internationalization,Locale,我正在开发一个与区域设置相关的功能,为了测试它,我需要使用不同的区域设置运行一些SQL查询。比如说 SET lc_messages to 'en_US.UTF-8'; -- some sql queries; SET lc_messages to 'fr_FR.UTF-8'; -- some sql queries; 在我的Linux机器上,它正在工作,但我们不能总是期望这个集合或任何(C或POSIX除外)区域设置在其他平台上可用。有办法解决这个问题吗?您有两个选择: 如果区域设置不存在,则跳

我正在开发一个与区域设置相关的功能,为了测试它,我需要使用不同的区域设置运行一些SQL查询。比如说

SET lc_messages to 'en_US.UTF-8';
-- some sql queries;
SET lc_messages to 'fr_FR.UTF-8';
-- some sql queries;
在我的Linux机器上,它正在工作,但我们不能总是期望这个集合或任何(C或POSIX除外)区域设置在其他平台上可用。有办法解决这个问题吗?

您有两个选择:

  • 如果区域设置不存在,则跳过测试:

    为此,您可以从以下内容开始测试

    SELECT (SELECT count(*) FROM pg_collation
            WHERE collname = 'fr_FR.UTF-8') = 0
           AS skip_test \gset
    \if :skip_test
    \quit
    
    然后为这种情况提供一个替代的“预期结果文件”

  • 如果区域设置不存在,则出错。毕竟,这样的测试是无法正确完成的

    如果只针对Linux系统,这可能是一个很好的解决方案


  • 如果您也以Windows为目标,则在失败之前也应尝试使用其区域设置名称。

    此功能是否打算包含在核心PostgreSQL中?你研究过核心回归测试是如何做到的吗?不,这不是为了包含在核心PostgreSQL中。我在核心回归测试中搜索,发现了一个测试src/test/regresse/sql/collate.sql,在这个测试中,由于同样的原因,只使用了“C”或“POSIX”语言环境。