【问题标题】:Parameter name Information missing in system view PG_PROC_INFO.proargnames for not named parameters参数名称 系统视图中缺少信息 PG_PROC_INFO.proargnames 用于未命名的参数
【发布时间】:2019-10-25 14:31:34
【问题描述】:

创建包含未命名参数的过程不会导致 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"}
  • 红移:{"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"}   

【问题讨论】:

  • 您的问题/挑战/疑问是什么? Redshift Postgres(包括 v8)
  • 谢谢,刚刚在说明中添加了这个。

标签: amazon-redshift


【解决方案1】:

我无法重现您的结果。你能提供你用来获取{"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}

【讨论】:

  • 我使用与您相同的查询(添加更多列)。我已经使用客户端 DbVisualizer、Datagrip 和app.us.datarow.com 进行了测试。谢谢你让我走上这条路。这让我找到了根本原因。司机。查看更新的问题
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2021-10-24
    • 2021-05-13
    • 2021-01-08
    • 2022-07-06
    • 2023-03-04
    相关资源
    最近更新 更多