Динамически создавать перечисления в базе данных PostgreSQL в узле

#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
);
 

К сожалению, я не могу преобразовать приведенный выше запрос и сделать его динамическим.

Я попробовал следующие подходы:

  1. С помощью одного параметра
 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');
 
  1. С несколькими параметрами путем ручной генерации 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');
 

Есть ли способ сделать это?