use pgx_utils::pg_config::PgConfig;
use pgx_utils::{exit_with_error};
use std::process::Stdio;
pub(crate) fn status_postgres(pg_config: &PgConfig) -> Result<bool, std::io::Error> {
let datadir = pg_config.data_dir()?;
let bindir = pg_config.bin_dir()?;
if !datadir.exists() {
return Ok(false);
}
let mut command = std::process::Command::new(format!("{}/pg_ctl", bindir.display()));
command
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.arg("status")
.arg("-D")
.arg(&datadir);
let command_str = format!("{:?}", command);
let output = command.output()?;
let code = output.status.code().unwrap();
let is_running = code == 0; let is_stopped = code == 3;
if !is_running && !is_stopped {
exit_with_error!(
"problem running pg_ctl: {}\n\n{}",
command_str,
String::from_utf8(output.stderr).unwrap()
)
}
Ok(is_running)
}