从计算操作访问领导节点类型

Posted

技术标签:

【中文标题】从计算操作访问领导节点类型【英文标题】:Accessing leader node types from compute operations 【发布时间】:2021-12-23 17:48:16 【问题描述】:

我已经构建了一个独立运行的视图。 但是,它来源于 pg_class 和 pg_namespace,它们只有领导节点的数据类型。 (在视图中,我已经从这些数据类型中提取了我需要的值,并将这些值转换为 varchar。)

我现在需要创建一个调用视图并将其数据返回给调用者的过程。 我仍然是一个红移新手,但我认为错误是因为 SProc 使用了不喜欢我的数据源仅作为领导者的计算节点。

警告:

列“b.relacl”具有不受支持的类型“aclitem[]”。 “b.nspacl”列 具有不受支持的类型“aclitem[]”。

执行SQL命令时出错:CALL myschema.permissions_sp('info_results')

错误:list_nth_cell:列表中的索引无效其中:SQL 语句 “创建临时表 info_results 作为选择.....

寻求有关如何将这些数据提供给我的最终用户的指导!!

作为背景,我是通过过程执行的,因为 pg_class 和 pg_namespace 自然只会根据调用者的身份显示结果行,并且过程允许我使用“SECURITY DEFINER”并返回所有行。

谢谢

程序:

CREATE OR REPLACE PROCEDURE myschema.permissions_sp(INOUT tmp_name character varying(256))
 LANGUAGE plpgsql
 SECURITY DEFINER
AS $$
BEGIN
  EXECUTE 'drop table if exists ' || tmp_name;
  EXECUTE 'create temp table ' || tmp_name || ' as select schema_name,schema_owner,grantee_type,grantee,p_usage,p_create,object_name,perms,p_select,p_update,p_insert,p_delete,p_truncate,p_references,p_trigger,p_rule from myschema.homebrew_stv';
  EXECUTE 'GRANT SELECT on table ' || tmp_name || ' TO myuser';
END;
$$
/

查看:

create or replace view myschema.homebrew_stv
as

select 
  case when (s.schema_name in ('information_schema','pg_catalog','pg_toast','pg_internal')) or (s.schema_name like 'pg_temp_%')  then 1 end as issys,
  cast(s.schema_name as varchar(256)) schema_name,
  cast(s.schema_owner as varchar(256)) schema_owner,
  s.grantee_type,
  cast(s.grantee as varchar(256)) grantee,
  s.p_usage,
  s.p_create,
  cast(t."object" as varchar(256)) "object_name",
  cast(t.perms as varchar(256)),
  t.p_select,
  t.p_update,
  t.p_insert,
  t.p_delete,
  t.p_truncate,
  t.p_references,
  t.p_trigger,
  t.p_rule
from 
  myschema.homebrew_schema_xtended s
  left outer join 
  myschema.homebrew_tv_xtended t
  on 
    s.schema_name = t.schema_name and 
    s.grantee_type = t.grantee_type and 
    s.grantee = t.grantee
 where s.grantee <> 'rdsdb'

information_schema.columns

table_schema table_name column_name data_type

myschema homebrew_stv p_rule 整数 myschema homebrew_stv p_trigger 整数 myschema homebrew_stv p_references 整数 myschema homebrew_stv p_truncate integer myschema homebrew_stv p_delete 整数 myschema homebrew_stv p_insert 整数 myschema homebrew_stv p_update 整数 myschema homebrew_stv p_select 整数 myschema homebrew_stv p_create 整数 myschema homebrew_stv p_usage 整数 myschema homebrew_stv issys 整数 myschema homebrew_stv 烫发字符变化 myschema homebrew_stv object_name 字符不同 myschema homebrew_stv 受赠者字符不同 myschema homebrew_stv grantee_type 字符变化 myschema homebrew_stv schema_owner 字符不同 myschema homebrew_stv schema_name 字符不同

【问题讨论】:

【参考方案1】:

最后的简单解决方案......只需使用游标而不是临时表。

BEGIN
  OPEN rs_out FOR select schema_name,schema_owner,grantee_type,grantee,p_usage,p_create,object_name,perms,p_select,p_update,p_insert,p_delete,p_truncate,p_references,p_trigger,p_rule from myschema.homebrew_stv;
END;

【讨论】:

以上是关于从计算操作访问领导节点类型的主要内容,如果未能解决你的问题,请参考以下文章

动态访问/遍历/操作从控制器类外部的 FXML 创建的 JavaFX 节点

js获取节点的DOM操作

javascript操作DOM节点

SQL (根据子节点查询父节点信息)

Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)

openstack中彻底删除计算节点的操作记录