PostgreSQL:列名到数组 PL/pgSQL

Posted

技术标签:

【中文标题】PostgreSQL:列名到数组 PL/pgSQL【英文标题】:PostgreSQL: column names into array PL/pgSQL 【发布时间】:2015-09-12 16:49:48 【问题描述】:
create or replace function extr( tabname text ) returns text[] as
$$
declare cols text[];
begin
    execute 'array(select column_name::text from information_schema.columns where table_name = '||quote_literal(tabname)||');' into cols;
    return cols;
end;
$$
language 'plpgsql';

select extr('test');

提供一个表名并希望将其列名作为数组返回。上面的代码给出了“数组”或附近的语法错误。如何解决这个问题?

【问题讨论】:

【参考方案1】:

查询应该以select 开头,而不是array 并且不必是动态SQL。

试试这个修改后的版本:

create or replace function extr( tabname text ) returns text[] as
$$
declare cols text[];
begin
    select array(select column_name::text from information_schema.columns
      where table_name = tabname) into cols;
    return cols;
end;
$$
language 'plpgsql';

【讨论】:

以上是关于PostgreSQL:列名到数组 PL/pgSQL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pl/pgsql 中声明具有特定列名的行文字?

PostgreSQL vs Oracle:PL/pgSQL 的“编译时”检查

使用 PostgreSQL PL/pgSQL 在 For 循环中添加月份

PostgreSQL-PL/pgSQL控制结构

如何在 PostgreSQL、PL/pgSQL 上执行匿名代码块切换 CASE 语句?

使用 PL/pgSQL 在 PostgreSQL 中将多个字段作为记录返回