Mar*_*ark 9 postgresql stored-procedures
我正在使用一个实用程序来使用模板来生成针对Postgres数据库的数据访问层.作为其中的一部分,我试图动态发现存储过程的返回类型.在返回单个标准类型的简单情况下这很容易,但是当它返回用户定义的类型时我很挣扎.
如果有人能提供必要的SQL来返回这些数据,我将不胜感激.
谢谢马克
我很欣赏我到目前为止的答案,这些答案有效地归结为以下SQL
SELECT p.proname, t.typname, p,proretset
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
INNER JOIN pg_type t ON p.prorettype = t.oid
WHERE n.nspname = 'public'
--and proname = 'foo'
ORDER BY proname;
Run Code Online (Sandbox Code Playgroud)
这将返回返回类型的名称.但是,当它返回用户定义的类型时,我仍然需要将类型分解为构成它的属性.
在函数返回记录的情况下,除了调用函数并检查其返回值之外,我认为没有任何方法可以发现它的返回结构.
感谢大家的帮助,我认为 JackPDouglas 是正确的,并且由于返回记录集的函数可以是多态的,因此无法找出返回类型定义。
然而,这是我正在寻找的用于获取返回复合类型的函数的定义的 SQL:
SELECT t.typname, attname, a.typname
from pg_type t
JOIN pg_class on (reltype = t.oid)
JOIN pg_attribute on (attrelid = pg_class.oid)
JOIN pg_type a on (atttypid = a.oid)
WHERE t.typname = (
SELECT t.typname
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
INNER JOIN pg_type t ON p.prorettype = t.oid
WHERE n.nspname = 'public'
and proname = 'foo'
ORDER BY proname
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3779 次 |
| 最近记录: |