#javascript #node.js #postgresql #enums #node-postgres
#javascript #node.js #postgresql #перечисления #узел-postgres
Вопрос:
У меня есть служба, написанная на Node, которая вызывает конечную точку при запуске, получает обратно массив значений, и затем массив следует использовать для создания перечисления в базе данных PostgreSQL. Перечисление позже используется для создания таблицы в той же базе данных.
Обычный запрос выглядит следующим образом:
DO $
BEGIN
IF
NOT EXISTS (
SELECT 1 FROM pg_type WHERE typname = 'tableType'
)
THEN
CREATE TYPE
tableType
AS
ENUM (
firstType, secondType
);
END IF;
END $;
CREATE TABLE IF NOT EXISTS new_table(
id,
enumValue tableType
);
К сожалению, я не могу преобразовать приведенный выше запрос и сделать его динамическим.
Я попробовал следующие подходы:
- С помощью одного параметра
ENUM (
$1
);
И затем:
---
const tableTypes = await axios.get('/tableTypes');
await pgPool.query('BEGIN');
const createEnumQuery = fs.readFileSync(path.resolve(__dirname, './sql/createEnum.sql')).toString();
await pgPool.query(createEnumQuery, [tableTypes .data]); // or just tableTypes.data
await pgPool.query('COMMIT');
- С несколькими параметрами путем ручной генерации SQL с использованием цикла for
ENUM (
$1, $2, $3, ...
);
---
const tableTypes = await axios.get('/tableTypes');
await pgPool.query('BEGIN');
const createEnumQuery = fs.readFileSync(path.resolve(__dirname, './sql/createEnum.sql')).toString();
await pgPool.query(createEnumQuery, tableTypes .data);
await pgPool.query('COMMIT');
Есть ли способ сделать это?