На каком узле данных хранится таблица, как сделать запрос в postgres-xl?
При создании таблицы оператор sub распределить не используется.
Если есть 2 узла, как я могу запросить, где таблица хранится в действительности?
Если есть две таблицы и они принадлежат одной и той же схеме, будут ли они храниться в разных узлах данных?
1 ответ
Из документации:
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 (которая является командой SQL, специфичной для Postgres-XL):
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 или имя группы TO GROUP.