如何创建一个名称取自 PostgreSQL 中的字符串的表?
Posted
技术标签:
【中文标题】如何创建一个名称取自 PostgreSQL 中的字符串的表?【英文标题】:How to create a table whose name is taken from a string in PostgreSQL? 【发布时间】:2015-04-30 07:43:19 【问题描述】:我正在用 C 语言编写一个嵌入式 SQL 应用程序。 应用程序从函数接收字符串,我需要创建一个名称取自该字符串的表。 我必须创建几个不同名称的表,但我从一开始就不知道表的编号和名称。
这就是我想做的:
tablename = function();
...
EXEC SQL CREATE TABLE :tablename ( ... );
但是我收到了这个错误:
ERROR: syntax error at or near ":tablename"
【问题讨论】:
c
中的 EXEC SQL CREATE TABLE :
到底是什么?
先创建一个包含一段SQL的字符串,然后执行这段SQL。当心 SQL 注入,你可能会丢失一切......检查 PostgreSQL 中的 quote_ident() 函数。
【参考方案1】:
如果您必须创建相同的数据结构但具有唯一名称,则创建创建此类表的过程:
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注入)
【讨论】:
以上是关于如何创建一个名称取自 PostgreSQL 中的字符串的表?的主要内容,如果未能解决你的问题,请参考以下文章
如何编写循环条件以获取 postgresql 中的子子文件夹名称
Nodejs / PostgreSQL sequelize - 如何更新/更改数据库中的模型?