从计算操作访问领导节点类型
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 节点