PostgreSQL:按字母顺序显示列的函数

afdcj2ne  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(163)

在PostgreSQL上,我需要按字母顺序查看表中的列,所以我使用以下查询:

SELECT column_name, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'organizations' ORDER BY column_name ASC;

我每天都要用很多次,所以我想创建一个函数:

CREATE OR REPLACE FUNCTION seecols(table_name text)
 RETURNS TABLE (column_name varchar, data_type varchar)
AS $func$
 DECLARE
 _query varchar;
 BEGIN
  -- Displays columns by alphabetic order
   _query := 'SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '''||table_name||''' ';

  RETURN QUERY EXECUTE _query;
 END;
$func$ LANGUAGE plpgsql;

但当我尝试时:

SELECT seecols('organizations');

我得到:

**structure of query does not match function result type**

我猜"RETURNS TABLE(column_name varchar,data_type varchar)"这一行定义错误,但由于这是我第一次使用plpgsql,我不知道如何使它更动态。

v440hwme

v440hwme1#

这里你不需要动态sql也不需要plpgsql,只需要将sql查询嵌入到sql函数中即可:

CREATE OR REPLACE FUNCTION seecols (IN t_name text, OUT column_name varchar, OUT data_type varchar)
  RETURNS setof record LANGUAGE sql AS $$
  SELECT column_name, data_type 
    FROM INFORMATION_SCHEMA.COLUMNS 
   WHERE TABLE_NAME = t_name 
   ORDER BY column_name ASC ;
$$ ;

参见dbfiddle

相关问题