0

我正在尝试在 edb 9.6.10 创建一个分区表。当我尝试这样做时出现以下错误

    edb=# create table employee (id int, join_date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL ('1 day'::interval);
    ERROR:  syntax error at or near "INTERVAL"
    LINE 1: ...date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL (...
                                                             ^

请让我知道我在这里做错了什么。

4

2 回答 2

0

此 PARTITION BY RANGE INTERVAL 仅在版本 12 及更高版本中受支持。

查看 version11 和 version12 中相同查询的行为差异。

edb=# select version;
 PostgreSQL 11.11 (EnterpriseDB Advanced Server 11.11.20) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
(1 row)

edb=# create table employee (id int, join_date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL ('1 day'::interval);
ERROR:  syntax error at or near "INTERVAL"
LINE 1: ...date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL (...

在 Version12 中我们得到

edb=# select version();
PostgreSQL 12.4 (EnterpriseDB Advanced Server 12.4.5) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
    (1 row)

edb=# create table employee (id int, join_date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL ('1 day'::interval);
CREATE TABLE

此外,这种“INTERVAL”语法仅在 EnterpriseDB 付费产品中可用。对于社区 Postgres,例如 V13,您仍然会收到相同的错误。

[root@localhost bin]# ./psql -U postgres -d postgres -p 5432
psql (13.2)

Type "help" for help.

postgres=# create table employee (id int, join_date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL ('1 day'::interval);
ERROR:  syntax error at or near "INTERVAL"
LINE 1: ...date timestamp(6)) PARTITION BY RANGE (join_date) INTERVAL (...
于 2021-04-12T16:59:30.423 回答
0

据我所知,您尝试使用的功能仅存在于 EDB 的付费产品中,即使在那里,它也仅在 v12 中可用。

于 2021-04-06T15:49:01.310 回答