EXECUTE DIRECT
Function
EXECUTE DIRECT executes an SQL statement on a specified node. Generally, the cluster automatically allocates an SQL statement to proper nodes. EXECUTE DIRECT is mainly used for database maintenance and testing.
Precautions
- Only a system administrator can run the EXECUTE DIRECT statement.
- To ensure data consistency across nodes, only the SELECT statement can be used. Transaction statements, DDL, and DML cannot be used.
- When the AVG aggregation calculation is performed on the specified DN using such statements, the result set is returned in array, for example, {4,2}. The result of sum is 4, and that of count is 2.
- Do not run the SELECT statement on nodes where CNs reside because user table data is not stored there.
- EXECUTE DIRECT cannot be nested. If the inner SQL statement to be executed is also EXECUTE DIRECT, run only the bottom-layer EXECUTE DIRECT statement.
Syntax
EXECUTE DIRECT ON ( nodename [, ... ] ) query ;
Parameter Description
- nodename
Specifies the node name.
Value range: An existing node.
- query
Specifies the query SQL statement that you want to execute.
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | -- Query node distribution status in the current cluster:
SELECT * FROM pgxc_node;
node_name | node_type | node_port | node_host | node_port1 | node_host1 | hostis_primary | nodeis_primary | nodeis_preferred | node_id | sctp_port | control_port | sctp_port1 | control_port1
--------------+-----------+-----------+----------------+------------+----------------+----------------+----------------+------------------+-------------+-----------+--------------+------------+---------------
cn_5001 | C | 8050 | 10.180.155.74 | 8050 | 10.180.155.74 | t | f | f | 1120683504 | 0 | 0 | 0 | 0
cn_5003 | C | 8050 | 10.180.157.130 | 8050 | 10.180.157.130 | t | f | f | -125853378 | 0 | 0 | 0 | 0
dn_6001_6002 | D | 40050 | 10.180.155.74 | 45050 | 10.146.187.231 | t | f | f | 1644780306 | 40052 | 40052 | 45052 | 45052
dn_6003_6004 | D | 40050 | 10.146.187.231 | 45050 | 10.180.157.130 | t | f | f | -966646068 | 40052 | 40052 | 45052 | 45052
dn_6005_6006 | D | 40050 | 10.180.157.130 | 45050 | 10.180.155.74 | t | f | f | 868850011 | 40052 | 40052 | 45052 | 45052
cn_5002 | C | 8050 | localhost | 8050 | localhost | t | f | f | -1736975100 | 0 | 0 | 0 | 0
(6 rows)
-- Query records in table tpcds.customer_address on dn_6001_6002:
EXECUTE DIRECT ON(dn_6001_6002) 'select count(*) from tpcds.customer_address';
count
-------
16922
(1 row)
-- Query all records in table tpcds.customer_address:
SELECT count(*) FROM tpcds.customer_address;
count
-------
50000
(1 row)
|
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.