如何创建一个名称取自PostgreSQL中字符串的表?

时间:2015-04-30 07:43:19

标签: c postgresql embedded-database

我正在用C语言编写嵌入式SQL应用程序。 应用程序从函数接收一个字符串,我需要创建一个名称取自该字符串的表。 我必须创建几个具有不同名称的表,但我从一开始就不知道表的数量和名称。

这就是我想要做的事情:

tablename = function();
...
EXEC SQL CREATE TABLE :tablename ( ... );

但我收到了这个错误:

ERROR: syntax error at or near ":tablename"

1 个答案:

答案 0 :(得分:2)

如果必须创建相同的数据结构但具有唯一名称,则创建创建此类表的过程:

CREATE OR REPLACE FUNCTION create_temp_table(table_name varchar)
  RETURNS void AS
$BODY$
BEGIN
    EXECUTE 'CREATE TABLE ' ||  quote_ident(table_name) || ' (id SERIAL, kn VARCHAR, kv VARCHAR)';
END;
$BODY$
LANGUAGE plpgsql;

您可以通过以下方式从SQL调用它:

SELECT create_temp_table('tmp_table_31');

(注意使用quote_ident()来阻止SQL注入)