昨天 - 在 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:查询结果缓存与查询编译缓存

Redshift 卸载到 S3 位置,它是一个连接字符串

如何在 Redshift 中安排 DDL 定义视图(pg_catalog 表)的每日备份

libpq VS qpsql(postgre 的 QT 驱动程序)

postgre 导出单表和导入

postgre 之 行安全性策略