如何在PostgreSQL中描述SQL查询的列(获取它们的名称,数据类型等)

时间:2017-10-19 18:25:53

标签: postgresql cursor

我需要一种方法来获得"描述" SELECT查询(游标)中的列,例如它们的名称,数据类型,精度,比例等,在PostgreSQL中(或者更好的PL / pgSQL)。

我正在从Oracle PL / SQL转换,我可以使用内置过程dbms_sql.describe_columns获取此类描述。它返回一个记录数组,一个用于给定(已解析)游标的每一列。

EDB也已实施(https://www.enterprisedb.com/docs/en/9.0/oracompat/Postgres_Plus_Advanced_Server_Oracle_Compatibility_Guide-127.htm#P13324_681237

此类查询的示例:

select col1 from tab where col2 = :a

我需要一个可以这样调用的API(或解决方法)(希望如此):

select query_column_description('select col1 from tab where col2 = :a');

将返回类似于:

的内容
{{"col1","numeric"}}

为什么呢?我们构建视图,这些查询成为单独的列。例如,查看的查询如下所示:

select (select col1 from tab where col2 = t.colA) as col1::numeric
  from tab_main t

1 个答案:

答案 0 :(得分:0)

http://sqlfiddle.com/#!17/21c7a/2

您可以使用系统表:

第一步用您的查询创建一个临时视图(没有子句在哪里)

create or replace view temporary view a_view as
    select col1 from tab 

然后选择

select
    row_to_json(t.*)
from (
    select 
        column_name,
        data_type
    from
        information_schema.columns
    where
        table_schema = 'public' and
        table_name   = 'a_view'
) as t