Остановить Postgres через службу Windows
В настоящее время я настраиваю приложение aC#, чтобы позволить мне управлять приложениями на моем сервере Windows 2012.
Архитектура:
Главный сервер - Postgres x64 9.3, запущенный из службы Windows в качестве базы данных для чтения / записи, с режимом горячего резервирования и слотом репликации.
Подчиненный сервер - Postgres x64 9.3, запущенный из службы Windows в качестве сервера "только для чтения" с горячим резервированием через слот репликации.
Я планирую остановить сервисы, используя следующий код:
service = new ServiceController("postgresql-x64-9.4");
try
{
TimeSpan timeout = TimeSpan.FromMilliseconds(5000);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
log.writeLog(data, "success", "Postgres Stopped");
}
catch (Exception e)
{
log.writeLog(data, "ERROR", e.Message + " - " + e.InnerException);
msg = Encoding.ASCII.GetBytes("ERROR");
break;
}
Однако мне было интересно, насколько это безопасно в отношении целостности обеих баз данных.
Я знаю, что pg_ctl имеет режимы выключения, где "умный" режим ожидает активных процессов и закрывает соединения и т. Д. До остановки базы данных. Остановка службы Windows делает то же самое? Да, я могу, очевидно, использовать pg_ctl для достижения этой цели, однако я прошу интереса так же, как и все остальное.
Существуют ли риски, которые необходимо уменьшить в отношении любой активной репликации, или служба будет работать до тех пор, пока серверы не будут синхронизированы? Время "остановки" будет выполнено в момент, когда базы данных не находятся под большой нагрузкой записи, поэтому должны быть по существу синхронизированы. Я также могу проверить это, прежде чем запустить код "Стоп".
Намерение состоит в том, чтобы оставить реплицированное ведомое устройство "живым", но все еще в режиме ведомого только для чтения, пока главный сервер остановлен.
заранее спасибо