Как создать таблицу, имя которой взято из строки в PostgreSQL?

Я пишу встроенное приложение SQL на языке Си. Приложение получает строку из функции, и мне нужно создать таблицу, имя которой взято из этой строки. Мне нужно создать несколько таблиц с разными именами, но я не знаю номер и название таблиц с самого начала.

Вот что я хочу сделать:

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

Но я получил эту ошибку:

ERROR: syntax error at or near ":tablename"

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-инъекцию)

Другие вопросы по тегам