首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL 11 -尝试使用时间戳进行分区时出错

PostgreSQL 11 -尝试使用时间戳进行分区时出错
EN

Stack Overflow用户
提问于 2020-11-24 09:45:49
回答 1查看 1K关注 0票数 2

我在我的应用程序上使用postgres-11,我对分区有一个问题。

我创建了一个分区表,如下所示:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS MEASUREMENT (

    date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    ...
    CONSTRAINT MEASUREMENT_PK PRIMARY KEY (date,...)
)
PARTITION BY RANGE (date);

CREATE TABLE MEASUREMENT_P_INFINITY PARTITION OF MEASUREMENT FOR VALUES FROM (MINVALUE) TO (MAXVALUE);

稍后,当我尝试使用'yyyy-MM-dd HH24'格式使用TO_TIMESTAMP拆分分区时

代码语言:javascript
复制
       ALTER TABLE MEASUREMENT DETACH PARTITION MEASUREMENT_P_INFINITY;
    
       CREATE TABLE MEASUREMENT_P_2020_11_24_03
         PARTITION OF MEASUREMENT
         FOR VALUES FROM (TO_TIMESTAMP('1970-01-01 10', 'yyyy-MM-dd HH24'))
         TO (TO_TIMESTAMP('2020-11-24 04', 'yyyy-MM-dd HH24'));
    
       ALTER TABLE MEASUREMENT ATTACH PARTITION MEASUREMENT_P_INFINITY
         FOR VALUES FROM (TO_TIMESTAMP('2020-11-24 04', 'yyyy-MM-dd HH24'))
         TO (MAXVALUE);

我收到以下错误消息:

代码语言:javascript
复制
org.postgresql.util.PSQLException: ERROR: syntax error at or near "TO_TIMESTAMP"

我尝试了一个简单的查询:select TO_TIMESTAMP('1970-01-01 10', 'yyyy-MM-dd HH24');,它运行得很好。

当我使用postgres-13时,它工作正常。

PostgreSQL 11分区文档:https://www.postgresql.org/docs/11/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 13:14:57

Postgres 12中引入了为分区边界指定表达式的能力。

允许分区边界是任何表达式(Kyotaro Horiguchi,Tom Lane,Amit Langote) 这些表达式是在分区表创建时计算的。以前,只允许简单常量作为分区边界。

注意早期版本的“简单常量”部分。如果要使用这种语法,就必须升级到Postgres 12或13。

在Postgres 11中,您需要编写完整的时间戳值:

代码语言:javascript
复制
CREATE TABLE MEASUREMENT_P_2020_11_24_03
PARTITION OF MEASUREMENT
FOR VALUES FROM ('1970-01-01 10:00:00') TO ('2020-11-24 04:00:00');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64983903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档