Как создать таблицу, имя которой взято из строки в 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-инъекцию)