You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Redshift存储过程无法访问information_schema问题咨询

解决Redshift存储过程查询information_schema返回0结果的问题

嘿,我一眼就发现了问题所在——你在拆分输入表名的时候,把schema和table的变量赋值搞反了!

问题根源

当你传入参数'dev.abc'时,split_part(tablename,'.',1)提取的是.分隔符前的部分dev(这其实是schema名称),split_part(tablename,'.',2)提取的是.后的abc(这是表名称)。但你却把这两个值分别赋值给了table_name和schema_name变量,导致后续查询逻辑完全偏离了预期:

你的存储过程里执行的是:

counts := (select count(*) from information_schema.tables where table_schema = schema_name);

这里的schema_name实际是abc,而不是你想要的dev,所以查询返回0(你的数据库里应该没有名为abc的schema)。而你在存储过程外直接查询table_schema = 'dev',自然能得到正确结果。

修正后的存储过程

只需要调换变量赋值的顺序就能解决问题:

create or replace procedure dev.gp_information_schema_test (tablename varchar(64)) as $$
declare
 table_name varchar(64);
 schema_name varchar(64);
 counts int;
begin
 -- 正确赋值:第一部分是schema,第二部分是table
 schema_name := split_part(tablename,'.',1);
 table_name := split_part(tablename,'.',2);
 raise info 'table_name - %,Schema_name - %',table_name,schema_name;
 counts := (select count(*) from information_schema.tables where table_schema = schema_name);
 raise info 'count is -%',counts;
end;
$$ language plpgsql;

验证效果

重新调用存储过程:

call dev.gp_information_schema_test('dev.abc');

这次你会看到Schema_name - dev的提示信息,并且count值会和你在存储过程外执行select count(*) from information_schema.tables where table_schema = 'dev'的结果完全一致。

额外优化建议

为了让存储过程更健壮,可以处理用户只传入表名(不带schema)的情况:

create or replace procedure dev.gp_information_schema_test (tablename varchar(64)) as $$
declare
 table_name varchar(64);
 schema_name varchar(64);
 counts int;
begin
 -- 判断输入是否包含schema分隔符
 if position('.' in tablename) > 0 then
  schema_name := split_part(tablename,'.',1);
  table_name := split_part(tablename,'.',2);
 else
  -- 无schema时,使用当前会话的默认schema
  schema_name := current_schema();
  table_name := tablename;
 end if;
 raise info 'table_name - %,Schema_name - %',table_name,schema_name;
 counts := (select count(*) from information_schema.tables where table_schema = schema_name);
 raise info 'count is -%',counts;
end;
$$ language plpgsql;

内容的提问来源于stack exchange,提问作者Golokesh Patra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:37:08