Запрос ожидания завершается до регистрации новых данных в таблице - PullRequest
0 голосов
/ 15 октября 2019

Я переношу информацию из sql

Table1
Table2
Table3
Table4

Table1 является независимой
Table2 нужен Table1 id
Table3 нужен Table2 id
Table5 нужен Table1 id
и так далее. ..

Есть много таблиц. Я перемещаю всю информацию с помощью запросов SQL INSERT

insert into table1 (data1,data2) values ('val','val')
insert into table2 (data1,data2,id_table1) values ('val','val',
    (select id from table1 order by id desc limit 1)
)
insert into table3 (data1,data2,id_table1) values ('val','val',
    (select id from table2 order by id desc limit 1)
)
insert into table5 (data1,data2,id_table1) values ('val','val',
    (select id from table1 order by id desc limit 1)
)

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

Как я могу сделать остановки таблиц1, таблиц2, таблиц3, таблиц4, регистрирующих данные, пока мой запрос не завершится? может быть, можно использовать транзакционные таблицы, такие как laravel?

1 Ответ

0 голосов
/ 15 октября 2019

Ваша настройка зависит от того факта, что SELECT id FROM table1 ORDER BY id DESC LIMIT 1 всегда будет давать вам id, который вы вставили. Следовательно, для того, чтобы ваш дизайн работал, вам нужно согласованное состояние / снимок, из которого можно посмотреть ваши данные. Среды Postgres MVCC помогут вам в этом: завершение транзакции вокруг блока BEGIN .. COMMIT должно помочь вам достичь этого - вы также должны сначала выполнить set transaction isolation level repeatable read; перед выполнением первого запроса INSERT. Таким образом, другие пользователи все еще могут вставить, но вы всегда увидите один и тот же снимок.

...