gpt4 book ai didi

python - 在 Postgresql 中将 CURRENT_DATE 设置为常量值以进行单元测试

转载 作者:行者123 更新时间:2023-11-29 12:44:04 24 4
gpt4 key购买 nike

我正在尝试为一个小脚本编写单元测试,该脚本从 PostgreSQL 数据库表中删除所有超过 6 个月的条目。该脚本执行以下查询。

DELETE FROM some_table WHERE tstamp < (CURRENT_DATE - INTERVAL '180 days');

脚本是用 Python 编写的,我使用的是 testing.postgresql创建一个我可以自由操作的本地临时数据库实例。我遇到的问题是我无法找到一种方法来强制 CURRENT_DATE 成为一个常量值,以便我可以创建某个日期之前和之后的测试条目,并且如果测试稍后运行则不会更改。

是否可以覆盖 PostgreSQL 数据库中的 CURRENT_DATE 以始终返回预定义的时间?

最佳答案

您无法更改 CURRENT_DATE、CURRENT_TIMESTAMP。你的问题很常见,常见的解决方案很简单 - 在没有任何这些伪常量的部分之间打破你的代码并与它分开。

So函数/查询

DELETE FROM some_table WHERE tstamp < (CURRENT_DATE - INTERVAL '180 days');

不可测试,但功能正常

CREATE OR REPLACE FUNCTION delete_180days(_to_date date)
RETURNS void AS $$
DELETE FROM some_table
WHERE tstamp < ($1 - INTERVAL '180 days')
$$ LANGUAGE sql;

现在,我可以为函数 delete_180days 编写测试。在应用程序中我可以使用它 SELECT delete_180days(CURRENT_DATE)

关于python - 在 Postgresql 中将 CURRENT_DATE 设置为常量值以进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597504/

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