Добавить SQL таблицу CHECK, используя sequelize? - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу добавить эту ПРОВЕРКУ в одну из моих таблиц. Я использую Sequelize в node.js API, работающем на Postgres DB.

CHECK (
    (
        CASE WHEN UserID         IS NULL THEN 0 ELSE 1 END
        + CASE WHEN TableID      IS NULL THEN 0 ELSE 1 END
        + CASE WHEN FoodID       IS NULL THEN 0 ELSE 1 END
        + CASE WHEN RestaurantID IS NULL THEN 0 ELSE 1 END
        + CASE WHEN CategoryID   IS NULL THEN 0 ELSE 1 END
        + CASE WHEN ShipID       IS NULL THEN 0 ELSE 1 END
    )
    = 1
)

Итак, мне нужна база данных для принудительной проверки таблицы, где один из этих столбцов должен быть не нулевым, и только один, остальные должны быть нулевыми.

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

Я пытался сделать это:

let sql = `ALTER TABLE TestTable
ADD CONSTRAINT check_test CHECK testBool=false;`
await sequelize.query(sql, { type: sequelize.QueryTypes.RAW });

Я только что создал TestTable с столбец testBool только для того, чтобы проверить, работает ли он вообще.

Когда он запускается, я получаю эту ОШИБКУ:

relation "testtable" does not exist

Я не понимаю, почему все имя в нижнем регистре. В определении модели у меня даже есть:

freezeTableName: true

Я вижу таблицу в БД, я могу сохранить в нее строки и т. Д. c ... так что она есть.

1 Ответ

0 голосов
/ 15 апреля 2020

Из отзывов, которые я получил в комментариях:

  1. используйте sequelize.QueryTypes.RAW

  2. соблюдайте соответствующие правила именования Postgres правила именования

  3. выполнить этот обработанный запрос:

    let sql = ALTER TABLE test_table ADD CONSTRAINT check_test CHECK testBool=false;

    await sequelize.query ( sql, {type: sequelize.QueryTypes.RAW});

...