2

创建表时,不使用distribute sub语句。

如果有 2 个节点,我如何查询表的实际存储位置?

如果有两个表并且它们属于同一个模式,它们会存储在不同的数据节点吗?

4

1 回答 1

2

从文档中:

If DISTRIBUTE BY is not specified, columns with UNIQUE constraint
will be chosen as the distribution key. If no such column is
specified, distribution column is the first eligible column 
in the definition. If no such column is found, then the table 
will be distributed by ROUNDROBIN.

在您的用例场景中,在不使用 TO NODE 节点名指令或指定分发方法的情况下创建表时,将在所有数据节点中创建该表,并且在数据节点之间通过散列或循环分配行。

您可以使用 EXECUTE DIRECT(这是 Postgres-XL 特有的 SQL 命令)查看哪些数据节点中有哪些行:

test_db=# CREATE TABLE test (id integer UNIQUE, name varchar(30) NULL);
CREATE TABLE
test_db=# insert into test (id, name) values (0,'0test');
INSERT 0 1
test_db=# insert into test (id, name) values (1,'1test');
INSERT 0 1
test_db=# insert into test (id, name) values (2,'2test');
INSERT 0 1
test_db=# insert into test (id, name) values (3,'3test');
INSERT 0 1
test_db=# EXECUTE DIRECT ON (datanode1) 'select * from test';
 id | name
----+-------
  1 | 1test
  2 | 2test
(2 rows)

test_db=# EXECUTE DIRECT ON (datanode2) 'select * from test';
 id | name
----+-------
  0 | 0test
  3 | 3test
(2 rows)

正如我刚才提到的,如果您使用TO NODE nodenameTO GROUP groupname,您可以将表存储在某个数据节点上。

于 2016-08-25T17:03:24.377 回答