参数名称未命名参数的系统视图PG_PROC_INFO.proargnames中缺少信息

时间:2019-06-11 08:04:03

标签: amazon-redshift

创建包含未命名参数的过程不会导致PG_PROC_INFO.proargnames包含该参数的空字符串。

这不符合PostgreSQL文档中对proargnames列的描述 https://www.postgresql.org/docs/8.0/catalog-pg-proc.html

有人知道这是否是故意的吗?

示例 使用以下参数定义过程

CREATE PROCEDURE testunnamed (IN INTEGER, IN p2 INTEGER)

为proargnames提供以下值。

  • PostgreSQL: {“”,“ p2”}
  • Redshift: {“ p2”}

对于Redshift,视图PG_PROC_INFO和表PG_PROC中的值相同。

从PG_PROC_INFO中的数据生成“(IN INTEGER,IN p2 INTEGER)”所需的信息。在postgreSQL中,有一个pg_get_function_arguments函数在redshift中不可用。

原因-驱动程序问题 我确实开始怀疑这是驱动程序问题(与RedshiftJDBC 01.02.27.1051一起运行) 我通过使用PostgreSQL驱动程序运行与Redshift的连接来进行测试。 那似乎是正确的。现在,我得到了预期的输出。

SELECT p.proname, p.pronargs, p.proargnames FROM pg_catalog.pg_proc_info p WHERE p.proname LIKE 'testunnamed%' ;

Driver       proname       pronargs   proargnames 
-------      -----------   --------   ----------- 
PostgresSQL  testunnamed   2          {"","p2"}   
Redshift     testunnamed   2          {"p2"}   

2 个答案:

答案 0 :(得分:0)

我无法复制您的结果。您可以提供用来获取{"p2"}的查询吗?

SELECT version();
--  … Redshift 1.0.7804

CREATE PROCEDURE testunnamed (IN INTEGER, IN p2 INTEGER) language plpgsql as $$ begin null; end; $$;
-- CREATE PROCEDURE

SELECT proargnames FROM pg_proc_info WHERE proname = 'testunnamed';
--  proargnames
-- -------------
--  {"",p2}

SELECT proargnames FROM pg_proc WHERE proname = 'testunnamed';
--  proargnames
-- -------------
--  {"",p2}

答案 1 :(得分:0)

JDBC驱动程序的问题已在最新版本的驱动程序中得到解决。