Loopback - PostgreSQL: как сделать блокировку на уровне строк? - PullRequest
0 голосов
/ 17 сентября 2018

Я использую Loopback с PostgresSQL. Я проверил документы Loopback, но, похоже, нет инструкции для блокировки на уровне строк. Я пытаюсь использовать транзакцию, как это:

  • Процесс Начать транзакцию, выбрать сделку с этой транзакцией, затем подождать 10 секунд. Таким образом, он должен заблокировать эту строку через 10 секунд.

  • Процесс B запускается через 2 секунды после процесса A, также начинайте транзакцию и выбирайте ту же сделку.

Я ожидаю, что процесс B не сможет выбрать эту строку до истечения 10 секунд, но может.

Рассмотрим этот сценарий:

const wait = s => new Promise(resolve => setTimeout(resolve, s * 1000));

async function test(id, processName) {
  const { Trade } = app.models;
  const transaction = await Trade.beginTransaction({});

  console.log(`Process ${processName} - start`);
  const trade = await Trade.findOne({ where: { id }, transaction });
  if (trade) {
    console.log(`Process ${processName} - trade found`);
  }

  await wait(10);
  transaction.commit();
  console.log(`Process ${processName} - finished`);
}

test('1809004512', 'A');
// Wait 2 seconds before calling process B
wait(2).then(() => test('1809004512', 'B'));

Вот лог:

Process A - start
Process A - trade found

// 2 seconds waiting

Process B - start
Process B - trade found

// 8 seconds waiting

Process A - finished
Process B - finished

Я ожидаю, что если строка заблокирована в правильном направлении, Process B - trade found должно быть напечатано после Process A - finished

Что мне делать? Пожалуйста, помогите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...