无法在 psql GreenPlum 中分发
Posted
技术标签:
【中文标题】无法在 psql GreenPlum 中分发【英文标题】:Can't DISTRIBUTE BY in 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。 【参考方案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 对于表定义不是强制性的,但在现实世界中,为了最佳实践,每个表都应该有一个主键。以上是关于无法在 psql GreenPlum 中分发的主要内容,如果未能解决你的问题,请参考以下文章
使用 psql 和 centos7 进行任何搜索或插入操作时,greenplum 永远挂起
无法从 Windows 上的 pgadmin 连接到 greenplum postgresql