AntDB是一款分佈式數據庫產品,其分佈式的特性決定了當咱們使用某些字段,例如tableoid和xc_node_id系統字段,及enum類型字段,xc_node_id,xc_node_str(), adb_node_oid() GUC變量可能出現如下問題。node
一、各個節點的值不同,作等值、比較操做時須要注意,結果可能不正確;git
二、order by操做可能無效,只要是各個節點相同的值內部存儲不相同的類型github
下面舉例說明:sql
建立表,插入數據。數據庫
create table tt(c1 int, c2 int, c3 text);分佈式
insert into tt values(1,1,'a'), (2,2,'b'), (3,3,'c'), (4,4,'d') ;post
tableoid各個節點的值有可能不同測試
postgres=# select tableoid, * from tt;3d
tableoid | c1 | c2 | c3postgresql
----------+----+----+----
16410 | 1 | 1 | a
16410 | 2 | 2 | b
16412 | 3 | 3 | c
16412 | 4 | 4 | d
(4 rows)
在coordinator上:
在datanode上,tableoid和pg_class中關於此表的行。
由此可知,在coordinator上和不一樣的datanode上,tableoid是有可能不一樣的,所以,利用tableoid去做join操做可能得不到預期結果。
例如,利用在coordinator上利用tableoid和pg_class的oid做join獲取表的名字,就得不到預期結果。
xc_node_id:
數據分佈在兩個datanode上,兩個datanode的xc_node_id不一樣。
postgres=# select xc_node_id, * from tt;
xc_node_id | c1 | c2 | c3
------------+----+----+----
1853972 | 1 | 1 | a
1853972 | 2 | 2 | b
709075352 | 3 | 3 | c
709075352 | 4 | 4 | d
(4 rows)
pgxc_node_str:不一樣節點的pgxc_node_str名字不一樣,與node表中起的名字同樣。
postgres=# select * from pgxc_node_str();
pgxc_node_str
---------------
coord0
(1 row)
postgres=# select * from pgxc_node_str();
pgxc_node_str
---------------
dm0
(1 row)
adb_node_oid:
postgres=# select * from adb_node_oid();
adb_node_oid
--------------
11990
(1 row)
datanode上顯示爲0
postgres=# select * from adb_node_oid();
adb_node_oid
--------------
0
(1 row)
枚舉類型字段:
測試:
CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');
CREATE TABLE enumtest (col rainbow);
INSERT INTO enumtest values ('yellow'), ('red'), ('green'), ('orange');
SELECT * FROM enumtest WHERE col = 'orange';
SELECT * FROM enumtest WHERE col > 'orange';
在coordinator上查詢pg_enum:
postgres=# select * from pg_enum ;
enumtypid | enumsortorder | enumlabel
-----------+---------------+-----------
16388 | 1 | red
16388 | 2 | orange
16388 | 3 | yellow
16388 | 4 | green
16388 | 5 | blue
16388 | 6 | purple
(6 rows)
在datanode上查詢pg_enum:
postgres=# select * from pg_enum ;
enumtypid | enumsortorder | enumlabel
-----------+---------------+-----------
16385 | 1 | red
16385 | 2 | orange
16385 | 3 | yellow
16385 | 4 | green
16385 | 5 | blue
16385 | 6 | purple
(6 rows)
參考:
QQ交流羣:496464280
源碼地址:http://github.com/ADBSQL
歡迎廣大postgresql愛好者使用和交流。