private void startCommand()
			throws IOException, InterruptedException, SAXException, GeneralSecurityException {
		discoverPostgresInstall();
		initializeDataDirectory();

		if (localAuthentication == AUTHENTICATION_PKI && certParameter == null) {
			throw new GeneralSecurityException(
				"Path to certificate necessary to start server (--cert /path/to/cert)");
		}
		File logFile = new File(dataDirectory, "logfile");
		List<String> command = new ArrayList<String>();
		command.add(postgresControl.getAbsolutePath());
		command.add("start");
		command.add("-w");
		command.add("-D");
		command.add(dataDirectory.getAbsolutePath());
		command.add("-l");
		command.add(logFile.getAbsolutePath());
		int res = runCommand(null, command, loadLibraryVar, loadLibraryValue);
		if (res != 0) {
			throw new IOException("Could not start postgres server process");
		}

		System.out.println("Server started");
		boolean extensionEnabled = true;
		try {
			enableLSHExtension();
		}
		catch (SQLException e) {
			System.out.println(e.getMessage());
			extensionEnabled = false;
		}
		if (extensionEnabled) {
			System.out.println("BSim extension enabled");
		}
		else {
			forceShutdown = true;			// Force a shutdown, because extension isn't enabled
			stopCommand();
		}
	}
Start a PostgreSQL server, configured for BSim, on the local host.
If the data directory is already populated, the server process is simply restarted.
If the data directory is empty, a new server configuration is established, and the server is started.
Authentication may be necessary, either via password or certificate, in order to enable
the BSim extension on the server

@throws IOException if postgres cannot be started 
@throws InterruptedException if the process fails during the run
@throws SAXException if the data directory cannot be initialized
@throws GeneralSecurityException if the authentication fails
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java