【问题标题】:Can't DISTRIBUTE BY in psql GreenPlum无法在 psql GreenPlum 中分发
【发布时间】:2015-10-14 08:10:24
【问题描述】:

我正在尝试在运行 GreenPlum (Postgres) 服务器的 RHEL5 机器上创建一个表。

我要创建的表需要有一个“DISTRIBUTE BY”子句,其中一些列作为其谓词。

如果没有“分发方式”,整个命令可以很好地创建表,但是当我添加它时,会出现以下语法错误:

错误:“已分发”处或附近的语法错误

我也查看了这篇帖子 (DISTRIBUTE BY notices in Greenplum),但找不到解决方案。

查询结构为:

创建表(列) DISTRIBUTED BY(列);

谢谢!

【问题讨论】:

  • 您运行的确切版本是什么?
  • @JosipIvicpostgres=# CREATE TABLE testdb (column1 int, column2 text) 分配者 (column1, column2);错误:“DISTRIBUTED”第 1 行或附近的语法错误:CREATE TABLE testdb (column1 int, column2 text) DISTRIBUTED ...
  • @JakubKania 根据安装文件是:4.3.6.1-build-2
  • @JakubKania 更好: postgres=# select version();版本 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------- -------- ----------- x86_64-redhat-linux-gnu 上的 PostgreSQL 9.2.13,由 gcc (GCC) 4.8.3 20140 911 (Red Hat 4.8.3-9) 编译,64 位 (1行)
  • @Ronnie 看来您使用的是 PostgreSQL 而不是 Greenplum。

标签: sql syntax greenplum


【解决方案1】:

这里您只是连接到 Postgres,而不是 Greenplum,这就是您收到此错误的原因。

运行psql 时,请确保您指定了正确的主机和要连接的正确端口,例如psql -h greenplum_master -p 5432

当您运行连接到 Greenplum 数据库的 select version(); 时,您会看到

[gpadmin@gpdb greenplum-db]$ psql
psql (8.2.15)
Type "help" for help.

test=# select version();
                                                                       version                                                                        
------------------------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.2.15 (Greenplum Database 4.3.6.1 build 2) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Oct  1 2015 15:14:22
(1 row)

这意味着您正在运行 Greenplum。如果您只看到 PostgreSQL,请确保 Greenplum 启动时在 GPDB 主控主机上运行 gpstate 并确保您连接到正确的主机和端口

【讨论】:

    【解决方案2】:

    当您指定分布式子句,并且您的表中有一个主键时,您的分布式键应该是主键的一部分,它应该是主键的一部分。

    比如你的主键是column1、column2和column 3,那么你的分布式key应该是column1或者column1&column2或者和你的主键一样。

    【讨论】:

    • 这是不正确的。您不需要 PK 来指定分发密钥。您还应该避免使用 PK 索引,因为它会增加存储空间、减慢数据加载速度,并且查询优化器很少会使用该索引。
    • 谢谢乔恩。我纠正我的答案。使用分布式键时不需要主键。
    • Jon,根据 3NF,每个表都应该有一个主键。
    • Robinson,如果您愿意,请继续创建 PK。 Greenplum 不需要在表上拥有一个,并且在表上使用散列分布不需要 PK。
    • 你是对的。 PK 对于表定义不是强制性的,但在现实世界中,为了最佳实践,每个表都应该有一个主键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多