【问题标题】:How to create a table whose name is taken from a string in PostgreSQL?如何创建一个名称取自 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() 函数。

标签: c postgresql embedded-database


【解决方案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注入)

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多