如何检查Postgresql中使用Type的位置?

时间:2015-10-13 11:37:20

标签: sql postgresql

我的类型定义为:

CREATE TYPE A AS
   (header text,
    body text,
    id numeric);
ALTER TYPE A

我想为它添加更多的属性,但我不知道如何检查这种类型的使用位置。

如何获取哪个函数将其用作返回类型的列表?

例如,如果我有功能:

CREATE OR REPLACE FUNCTION X(a integer, b integer, c integer, d citext)
  RETURNS A AS .....

查询将在其结果中列出X.

2 个答案:

答案 0 :(得分:1)

示例设置:

create type my_type as (id int, str text);

create table my_table (val my_type);

create function my_fun()
returns my_type language sql as $$
    select (1, '1')::my_type;
$$;

使用pg_depend查找对my_type的所有引用:

select deptype, pg_describe_object(classid, objid, objsubid)
from pg_depend d
join pg_class c on refobjid = reltype
where c.oid = 'my_type'::regclass

 deptype |    pg_describe_object     
---------+---------------------------
 i       | composite type my_type
 i       | type my_type[]
 n       | table my_table column val
 n       | function my_fun()
(4 rows)

答案 1 :(得分:0)

您可以运行以下查询:

postgres=# select oid::regprocedure from pg_proc
             where prorettype = 'A'::regtype;
┌─────────────────────────────────┐
│               oid               │
├─────────────────────────────────┤
│ x(integer,integer,integer,text) │
└─────────────────────────────────┘
(1 row)

有关函数的所有信息都存储在表pg_proc中。