我有一个场景,有点复杂。我想创建一个表,其名称和字段由用户定义。设置表的名称并不是很困难,但是一个表可以有 2 个字段和另外 5 个具有不同名称的字段,依此类推。我想用 pl/pgsql 完成这项工作。通常可以在 pl/pgsql 中做到这一点吗?是否可以先读取字段数,然后再读取每个字段的名称?你能给我一些提示吗?
问问题
976 次
1 回答
1
使用这样的功能:
CREATE OR REPLACE FUNCTION mktable(tabname TEXT, fields TEXT[])
RETURNS VOID AS $$
DECLARE
q TEXT := '';
BEGIN
q := 'CREATE TABLE ' || quote_ident(tabname) || ' ( ';
for i in array_lower(fields, 1) .. array_upper(fields, 1) loop
q := q || quote_ident(fields[i]) || ' TEXT ';
if i <> array_upper(fields, 1) then
q := q || ',';
end if;
end loop;
q := q || ' ) ';
raise notice 'Running query: ';
raise notice '%', q;
execute q;
END;
$$ LANGUAGE PLPGSQL;
你可以像这样运行它:
SELECT mktable('tab1', ARRAY['a', 'b', 'ccc', 'd d']);
然后你有桌子:
Table "public.tab1"
Column | Type | Modifiers
--------+------+-----------
a | text |
b | text |
ccc | text |
d d | text |
于 2013-01-08T20:52:42.077 回答