昨天 - 在 Redshift 和 PostgreSQL 中 - 日期添加兼容性
Posted
技术标签:
【中文标题】昨天 - 在 Redshift 和 PostgreSQL 中 - 日期添加兼容性【英文标题】:Yesterday - in Redshift & PostgreSQL - date addition compatibility 【发布时间】:2018-06-20 07:33:29 【问题描述】:尝试编写与 PostgreSQL 和 Amazon Redshift 兼容的查询。
原因:将数据从 PG 同步到 RS 以执行复杂的查询,但在开发/QA 环境中的预算(和数据库大小)要求仅使用 PG。
请求:返回昨天的日期
在 PostgreSQL 中:
SELECT DATE((NOW() - '1 DAY'::INTERVAL));
在 Redshift 中:
SELECT DATE(DATEADD(DAY, -1, GETDATE()));
问题:在其他平台上都不起作用。
是否有兼容的方式来实现请求的操作? ORM 是我们希望避免的选项。
【问题讨论】:
在一个平台上测试并部署另一个平台是一种危险的方法。至少,一旦 PostgreSQL 测试通过,您也应该至少针对 RedShift 运行相同的测试。 【参考方案1】:Postgres 和 Redshift 中的以下工作:
ANSI 标准 SQL:
SELECT current_date - interval '1' day;
-- 2018-06-19 00:00:00
SELECT current_timestamp - interval '1' day;
-- 2018-06-19 13:40:06.509337+00
Postgres(我相信 Redshift 也是如此)也支持替代(非标准)间隔语法:interval '1 day'
或者更紧凑(不是 100% ANSI SQL,但两者都适用):
SELECT current_date - 1;
-- 2018-06-19 00:00:00
SELECT current_timestamp - 1;
-- 2018-06-19 13:40:06.509337+00
【讨论】:
以上是关于昨天 - 在 Redshift 和 PostgreSQL 中 - 日期添加兼容性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Redshift 中安排 DDL 定义视图(pg_catalog 表)的每日备份