Есть файл db.sql и надо запустить его, получив готовую базу.
Насколько правильно прочитать его через
file_get_contents и далее в pdo exec отдать? Как лучше сделать?
На удаленной машине равернуто несколько контейнеров docker. Можно ли как то при подключении по ssh сразу автоматически перейти в первый контейнер, а при следующем подключении во второй, т.е задать при подключении к какому контейнеру подключится? Просто вопрос удобства, сейчас при каждом подключении делаю это вручную.
Есть 15 контейнеров, но одновременно может быть запущен только один.
Запускаю любой из них, остальным 14 уходит команда stop.
Как то можно это сделать в один клик?
Или мне скрипт проще написать ?
create table test (
col1 int primary key,
col2 int not null
);
insert into test values (1, 10), (2, 20);
В первом соединении выполняю
set session transaction isolation level repeatable read;
start transaction;
select * from test;
update test set col2 = col2 + 10 where col1 = 1;
select * from test;
Во втором соединении выполняю
set session transaction isolation level repeatable read;
start transaction;
select * from test;
update test set col2 = col2 + 20 where col1 = 1; /* Ждем */
Возвращаюсь к первому соединению и выполняю commit;. После этого update во втором соединении выполнился.
ВОПРОС: Получается, что update во втором соединении учел изменения из другой транзакции, т.е поменял снимок?
Провожу далее этот же эксперимент в PostgreSQL.
В первом соединении выполняю
START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
select * from test;
update test set col2 = col2 + 10 where col1 = 1;
select * from test;
Во втором соединении выполняю
START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
select * from test;
update test set col2 = col2 + 20 where col1 = 1; /* Ждем */
select * from test;
Возвращаюсь к первому соединению и выполняю commit;. После этого update во втором соединении вывалился с ошибкой(оно и понятно, снимок то менять нельзя):
ОШИБКА: не удалось сериализовать доступ из-за параллельного изменения.