数据仓库服务 GaussDB(DWS)-其它函数:pgxc_parallel_query(text, text)

时间:2023-11-01 16:20:15

pgxc_parallel_query(text, text)

描述:在指定类型的数据实例上执行指定的SQL查询语句,并把查询语句的结果返回给当前CN。该函数8.1.2及以上版本支持。

函数有两个参数:

第一个参数:SQL语句在哪些实例上执行。当前支持的有效入参是 'dn', 'datanode','cn', 'coordinator', 'all', 其它值会导致函数执行报错。其中 'dn', 'datanode'表示在所有DN上执行,'cn', 'coordinator'表示在所有CN上执行, all表示在所有的CN和所有的DN上执行。

第二个参数:需要发往远程节点执行的SQL语句,函数内部会对SQL语句中查询的对象进行校验,不支持用户表、分布式表和自定义的多结果集函数。

返回值类型:record

  • 该函数功能仅为便于开发人员高效的收集集群内实例执行信息或者状态的视图,不建议用户直接使用。
  • 该函数为多结果集函数,返回的数据类型为record,所以需要在函数调用后面增加AS语句显示的指出输出的列名和数据类型,如下所示:
    SELECT * FROM pgxc_parallel_query('all', 'select node_name, db_name, thread_name, query_id, tid, lwtid, ptid, tlevel, smpid, wait_status, wait_event from pg_thread_wait_status') AS (node_name text, db_name text, thread_name text, query_id bigint, tid bigint, lwtid integer , ptid integer, tlevel integer , smpid integer, wait_status text, wait_event text);
  • 函数第二个参数指定的SQL语句输出结果的数据类型必须跟AS后面指明的数据类型一致,否则执行时可能会因为类型不匹配而报错。
  • 函数第二个参数指定的SQL语句中不能触发跨节点的查询动作,否则会触发执行报错。
  • 函数第二个参数指定的SQL语句只能是SELECT/UPDATE/DELETE/INSERT语句中的一种,且
    • 不支持语句中有returning语句。
    • 函数调用用户需具有SQL语句中对象相应的操作权限。
    • 如果是INSERT语句,不支持INSERT OVERWRITE、UPSERT、和INSERT INTO。
    • 对于UPDATE/DELETE/INSERT语句,只允许初始化用户在就地升级模式下或者管理员用户在重分布模式下执行;要求语句在每个实例上修改的记录数相同,否则执行会报错;函数会输出一条一列bigint类型的数值,此数值表示语句在每个实例上操作的记录数。
      SELECT * FROM pgxc_parallel_query('cn', 'UPDATE pg_partition SET relpages = 0') AS (updated bigint);
support.huaweicloud.com/sqlreference-dws/dws_06_0062.html