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

How to create a table whose name is taken from a string in PostgreSQL?

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

这就是我想要做的:

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

但是我得到了这个错误:

ERROR: syntax error at or near ":tablename"

如果您必须创建相同的数据结构但具有唯一的名称,那么创建过程来创建这样的 table:

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 注入)