Postgresql 函数返回一组列

Postgresql 函数返回一组列,postgresql,Postgresql,我试图返回模式/数据库中所有表的模式,但它抛出了一个错误- 我的代码- create or replace function Table_Schema(schemaname text, tablename text) RETURNS SETOF varchar as $body$ declare _query varchar; begin _query := 'select * from information_schema.columns WHERE table_name = ''

我试图返回模式/数据库中所有表的模式,但它抛出了一个错误-

我的代码-

create or replace function Table_Schema(schemaname text, tablename text) 
 RETURNS SETOF varchar
 as
$body$
declare
  _query varchar;
begin
 _query := 'select * from information_schema.columns WHERE table_name = '''||tablename||''' ';
  RAISE NOTICE '"%"' , _query;

   -- execute and return all
   RETURN QUERY EXECUTE _query;
end;
$body$
language plpgsql;


copy(select  
  Table_Schema(table_schema, table_name)
from information_schema.tables
where 
  table_schema  in ('public')) to 'C:\test\Table_Schema.csv' DELIMITER ',' CSV HEADER;

你能帮帮我吗?我想返回类型是个问题。谢谢

简单的答案是返回
信息集\u schema.columns

create or replace function Table_Schema(schemaname text, tablename text) 
 RETURNS setof information_schema.columns
 as
$body$
declare
  _query varchar;
begin
 _query := 'select * from information_schema.columns WHERE table_name = '''||tablename||''' ';
  RAISE NOTICE '"%"' , _query;

   -- execute and return all
   RETURN QUERY EXECUTE _query;
end;
$body$
language plpgsql;


但是您的函数没有多大意义,因为您从不使用
schemaname
变量,同样的事情也可以通过直接
select
查询来实现。

简单的答案是返回
一组信息\u schema.columns

create or replace function Table_Schema(schemaname text, tablename text) 
 RETURNS setof information_schema.columns
 as
$body$
declare
  _query varchar;
begin
 _query := 'select * from information_schema.columns WHERE table_name = '''||tablename||''' ';
  RAISE NOTICE '"%"' , _query;

   -- execute and return all
   RETURN QUERY EXECUTE _query;
end;
$body$
language plpgsql;


但是您的函数没有多大意义,因为您从不使用
schemaname
变量,同样的事情也可以通过直接
select
查询来实现。

不需要使用动态SQL或PL/pgSQL

创建或替换函数表\u模式(模式名文本、表名文本)
返回一组信息\u schema.columns
作为
$body$
选择*
从信息_schema.columns
其中table_name=tablename
表_schema=schemaname;
$body$
语言sql;
但要将所有列导出到CSV文件中,实际上根本不需要函数:

\copy (select * from information_schema.columns where table_schema = 'public' order by schema_name, table_name, ordinal_position) to '/path/to/output.csv' with (format csv)

不需要对动态SQL或PL/pgSQL进行任何修改

创建或替换函数表\u模式(模式名文本、表名文本)
返回一组信息\u schema.columns
作为
$body$
选择*
从信息_schema.columns
其中table_name=tablename
表_schema=schemaname;
$body$
语言sql;
但要将所有列导出到CSV文件中,实际上根本不需要函数:

\copy (select * from information_schema.columns where table_schema = 'public' order by schema_name, table_name, ordinal_position) to '/path/to/output.csv' with (format csv)

谢谢,明白了。只是一个小错误。应该有表\模式而不是模式\名称。你能编辑一下吗,这样我就可以接受它作为我的答案了?谢谢,收到了。只是一个小错误。应该有表\模式而不是模式\名称。你能不能编辑一下,这样我就可以接受它作为我的答案?明白了。谢谢你的回复。谢谢你的回复