如何创建一个名称取自 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中的工作日编号中获取日期名称?

如何编写循环条件以获取 postgresql 中的子子文件夹名称

Nodejs / PostgreSQL sequelize - 如何更新/更改数据库中的模型?

在 Rails 模型中使用多个 PostgreSQL 模式

在 Django/PostgreSQL 搜索结果页面上突出显示搜索词

如何在PostgreSQL中建只读账号