我想手动调用表名输入类型然后结果应该是表的详细信息,我试过那些函数
1)
DECLARE
All_columns varchar;
Tab_name ALIAS FOR $1 ;
BEGIN
FOR All_columns IN SELECT column_name
FROM information_schema.columns
WHERE table_name=Tab_name
loop
raise notice 'Columns:%',All_columns;
end loop;
return All_columns;
END;
select test_levelfunction1('country_table');
显示国家/地区表的所有列
2)
DECLARE
All_columns varchar ;
Tab_name ALIAS FOR $1 ;
BEGIN
FOR All_columns IN SELECT Tab_name.*
FROM Tab_name
loop
raise notice 'Columns:%',All_columns;
end loop;
return All_columns;
END;
致电select test_levelfunction1('country_table');
会导致错误
我需要country_table
的所有细节
我该如何修复这个功能?
答案 0 :(得分:1)
就我阅读它们而言,这两种功能都不起作用。或者你希望第一个输入而不是列名。
您可能希望在两个函数中使用动态sql,例如:
EXECUTE $x$SELECT * FROM $x$ || Tab_name::regclass
http://www.postgresql.org/docs/current/static/plpgsql-statements.html
答案 1 :(得分:1)
您可以在很大程度上简化此任务。这个SQL函数完成了这项工作:
CREATE OR REPLACE FUNCTION f_columns_of_tbl(_tbl regclass)
RETURNS SETOF text AS
$func$
SELECT quote_ident(attname) AS col
FROM pg_attribute
WHERE attrelid = $1 -- valid, visible table name
AND attnum >= 1 -- exclude tableoid & friends
AND NOT attisdropped -- exclude dropped columns
ORDER BY attnum
$func$ LANGUAGE sql;
呼叫:
SELECT f_columns_of_tbl('myschema.mytable'); -- optionally schema-qualified name
有关详细信息,链接和plpgsql版本会考虑您上一个问题的相关答案:
PLpgSQL function to find columns with only NULL values in a given table