如何创建一个 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 注入)
我正在用 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 注入)