如何将参数的元数据获取到 postgresql 存储过程?

How can I get the metadata of the parameters to a postgresql stored procedure?

我一直在使用的,并且它没有用,是:

string schema;
string procedure;
DbCommand cmd;

// ...

cmd.CommandType = CommandType.Text;
cmd.CommandText =
"SELECT
    parameters.parameter_name,
    parameters.data_type,
    parameters.character_maximum_length,
    parameters.parameter_mode
FROM
    information_schema.routines
JOIN information_schema.parameters 
    ON routines.specific_name = parameters.specific_name
WHERE
    routines.specific_schema = :schemaname
    and routines.routine_name = :paraname
ORDER BY
    routines.routine_name,
    parameters.ordinal_position";
cmd.Parameters.Add(MakeParameter("schemaname", schema));
cmd.Parameters.Add(MakeParameter("paraname", procedure));

但是这个returns“”(空字符串)为参数名。

空参数名可能是为了防止没有名称:

create function foo(bar text, text) returns text language sql as 'select bar||';

SELECT                                                                                       
    parameters.parameter_name,
    parameters.data_type,
    parameters.character_maximum_length,
    parameters.parameter_mode
FROM
    information_schema.routines
JOIN information_schema.parameters 
    ON routines.specific_name = parameters.specific_name
WHERE
    routines.specific_schema = 'public'
    and routines.routine_name = 'foo'
ORDER BY
    routines.routine_name,
    parameters.ordinal_position;

┌────────────────┬───────────┬──────────────────────────┬────────────────┐
│ parameter_name │ data_type │ character_maximum_length │ parameter_mode │
├────────────────┼───────────┼──────────────────────────┼────────────────┤
│ bar            │ text      │                     ░░░░ │ IN             │
│ ░░░░           │ text      │                     ░░░░ │ IN             │
└────────────────┴───────────┴──────────────────────────┴────────────────┘

Documentation