创建包含未命名参数的过程不会导致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提供以下值。
对于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"}
答案 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驱动程序的问题已在最新版本的驱动程序中得到解决。