功能描述
执行一个前面准备好的预备语句。因为一个预备语句只在会话的生命期里存在,那么预备语句必须是在当前会话的前些时候用PREPARE语句创建的。
语法格式
EXECUTE name [ ( parameter [, ...] ) ]
参数说明
- name:要执行的预备语句的名字;
- parameter:给预备语句的一个参数的具体数值,它必须是一个生成与创建这个预备语句时指定参数的数据类型相兼容的值的表达式;
注意事项
如果创建预备语句的PREPARE语句声明了一些参数,那么传递给EXECUTE语句的必须是一个兼容的参数集,否则就会生成一个错误。
范例
PREPARE insert_customer(int,varchar(200),date,varchar(50)) AS INSERT INTO customer VALUES($1,$2,$3,$4);
PREPARE
EXECUTE insert_customer(11, '马超','20200618',15974236);
INSERT 0 1
语法兼容
SQL 标准包括了一个EXECUTE语句, 但是只被用于嵌入式 SQL。
相关语法
功能描述
在指定的节点上执行SQL语句。
语法格式
EXECUTE DIRECT ON ( nodename [, ... ] )
query
参数说明
- nodename:指定查询的节点名称,指定多个节点时用逗号分隔;
- query:要执行查询语句。
注意事项
只有系统管理员才能执行EXECUTE DIRECT。
由于CN节点不存储用户表数据,不允许指定CN节点执行用户表上的SELECT查询。
范例
SELECT * FROM pgxc_node;
node_name | node_type | node_port | node_host | nodeis_primary | nodeis_preferred | node_
-----------+-----------+-----------+-----------------+----------------+------------------+--------
cn1 | C | 5432 | 192.168.142.211 | f | f | -117871
cn3 | C | 5432 | 192.168.142.213 | f | f | 110106
dn1 | D | 5433 | 192.168.142.211 | t | t | -56002
dn2 | D | 5433 | 192.168.142.212 | f | f | 35236
dn3 | D | 5433 | 192.168.142.213 | f | f | -70012
(5 rows)
EXECUTE DIRECT ON(dn1) 'select count(*) from t1';
count
--------
324900
(1 row)
SELECT COUNT(*) FROM t1;
count
---------
1000000
(1 row)
语法兼容
在 SQL 标准中没有定义EXECUTE DIRECT语句。
功能描述
显示SQL语句的执行计划。
语法格式
EXPLAIN [ ( option [, ...] ) ] statement
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
这里option可以是:
ANALYZE [ boolean ]
VERBOSE [ boolean ]
COSTS [ boolean ]
BUFFERS [ boolean ]
TIMING [ boolean ]
SUMMARY [ boolean ]
FORMAT { TEXT | XML | JSON | YAML }
参数说明
- ANALYZE:显示实际运行时间和其他统计数据,默认值为FALSE;
- VERBOSE:显示有关计划的额外信息,默认值为FALSE;
- COSTS:包括每个规划节点的估计总成本,以及估计的行数和每行的宽度,默认值为TRUE;
- BUFFERS:包括缓冲区的使用情况的信息,默认值为FALSE;
- NODES:打印query执行的节点信息;
- NUM_NODES:打印执行中的节点的个数信息;
- TIMING:包括实际的启动时间和花费在输出节点上的时间信息,默认值为TRUE;
- SUMMARY:在查询计划之后包含摘要信息(例如,总计的时间信息);
- FORMAT:指定输出格式,取值范围:TEXT、XML、JSON或者YAML,默认为TEXT;
- boolean:指定被选中的选项是否应该被打开或关闭,可以指定TRUE、ON或1打开,或指定FALSE、OFF或0禁用,缺省情况下默认为TRUE;
- statement:指定要分析的SQL语句。
注意事项
在指定ANALYZE选项时,语句会被执行。如果用户想使用EXPLAIN分析INSERT,UPDATE,DELETE,CREATE TABLE AS或EXECUTE语句,而不想改动数据(执行这些语句会影响数据),请使用这种方法:
START TRANSACTION;
EXPLAIN ANALYZE ...;
ROLLBACK;
范例
EXPLAIN SELECT * FROM disttab;
QUERY PLAN
------------------------------------------------------------------
Remote Fast Query Execution (cost=0.00..0.00 rows=0 width=0)
Node/s: dn1, dn2, dn3
-> Seq Scan on disttab (cost=0.00..11.70 rows=170 width=426)
(3 rows)
EXPLAIN (FORMAT JSON) SELECT * FROM disttab;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
[</