Создание процедуры, включающей неназванный параметр, не приведет к PG_PROC_INFO.proargnames для этой процедуры, содержащей пустую строку для этого параметра.
Это не соответствует описанию столбца proargnames в документации PostgreSQL.
https://www.postgresql.org/docs/8.0/catalog-pg-proc.html.
Кто-нибудь знает, умышленно это или нет?
Пример
Определение процедуры с использованием следующих параметров
CREATE PROCEDURE testunnamed (IN INTEGER, IN p2 INTEGER)
дает следующее значение для proargnames.
- PostgreSQL: {"", "p2"}
- Redshift: {"p2"}
Для красного смещения одно и то же значение присутствует как в представлении PG_PROC_INFO, так и в таблице PG_PROC.
Информация необходима для генерации "(IN INTEGER, IN p2 INTEGER)" из данных в PG_PROC_INFO. В postgreSQL есть функция pg_get_function_arguments, которая недоступна в красном смещении.
ПРИЧИНА - Проблема с драйвером
Как я и начал подозревать, что это проблема с драйвером (Запуск с RedshiftJDBC 01.02.27.1051)
Я провел тестирование, запустив соединение с Redshift, используя вместо этого драйвер PostgreSQL.
Кажется, это точно. Теперь я получаю ожидаемый результат.
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"}