获取的功能,序列,类型等定义在PostgreSQL中使用SQL查询(Get definition o

2019-07-31 05:03发布

我需要PostgreSQL数据库对象创建脚本。

我还没有接触到pg_dump的。 所以,我得与SQL查询一切。 我怎么能这样做?

Answer 1:

为了得到一个功能使用的定义pg_get_functiondef()

select pg_get_functiondef(oid)
from pg_proc
where proname = 'foo';

有类似的功能检索索引,视图,规则等的定义。 有关详情请参阅手册: http://www.postgresql.org/docs/current/static/functions-info.html

获取用户类型的定义是一个比较棘手。 您将需要查询information_schema.attributes为:

select attribute_name, data_type
from information_schema.attributes
where udt_schema = 'public'
  and udt_name = 'footype'
order by ordinal_postion;

从您需要重新组装create type的语句。

欲了解更多信息,您将需要通过系统目录中的文档阅读: http://www.postgresql.org/docs/current/static/catalogs.html

但是,你应该更喜欢information_schema的意见,如果他们返回相同的信息。



Answer 2:

你会发现psql -E工具在你的追求者查询。
它显示查询psql执行其反斜杠命令时使用-就像\df+ myfunc有关此功能的详细信息。



Answer 3:

下面是使用pg_get_functiondef一个完整的示例查询:

WITH funcs AS (
  SELECT
    n.nspname AS schema
    ,proname AS sproc_name
    ,proargnames AS arg_names
    ,t.typname AS return_type
    ,d.description
    ,pg_get_functiondef(p.oid) as definition
  FROM pg_proc p
    JOIN pg_type t on p.prorettype = t.oid
    JOIN pg_description d on p.oid = d.objoid
    JOIN pg_namespace n on n.oid = p.pronamespace
  WHERE n.nspname = 'some_schema_name_here'
)
SELECT *
FROM funcs
;;

注意,很显然你应该指定架构名称,(或“公共”如果您正在使用该架构)



文章来源: Get definition of function, sequence, type etc. in Postgresql with SQL query