quarkusio/quarkus · error · RuntimeException
Unable to determine datasource URL
Error message
Unable to determine datasource URL
What it means
PsqlCommand generates a shell command to connect to the dev-services PostgreSQL database using psql. The datasource URL is taken either from the JDBC url (quarkus.datasource.jdbc.url, stripping the jdbc: prefix) or the reactive url (stripping vertx-reactive:). If neither key exists in the DevServicesLauncherConfigResultBuildItem config, it cannot determine where to connect and throws this RuntimeException.
Source
Thrown at extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PsqlCommand.java:39
public PsqlCommand(DevServicesLauncherConfigResultBuildItem devServicesLauncherConfigResultBuildItem) {
this.devServicesLauncherConfigResultBuildItem = devServicesLauncherConfigResultBuildItem;
}
@Override
public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
//todo: should this work for non-dev services stuff as well? What about non-default datasources
try {
URI uri;
if (devServicesLauncherConfigResultBuildItem.getConfig().containsKey(JDBC_DATASOURCE__URL_KEY)) {
uri = new URI(
devServicesLauncherConfigResultBuildItem.getConfig().get(JDBC_DATASOURCE__URL_KEY)
.substring("jdbc:".length()));
} else if (devServicesLauncherConfigResultBuildItem.getConfig().containsKey(REACTIVE_DATASOURCE__URL_KEY)) {
uri = new URI(
devServicesLauncherConfigResultBuildItem.getConfig().get(REACTIVE_DATASOURCE__URL_KEY)
.substring("vertx-reactive:".length()));
} else {
throw new RuntimeException("Unable to determine datasource URL");
}
int port = uri.getPort();
String host = uri.getHost();
String pw = devServicesLauncherConfigResultBuildItem.getConfig().get("quarkus.datasource.password");
commandInvocation.println("PGPASSWORD=" + pw + " psql --host=" + host + " --port=" + port + " --username="
+ devServicesLauncherConfigResultBuildItem.getConfig().get("quarkus.datasource.username") + " "
+ uri.getPath().substring(1));
return CommandResult.SUCCESS;
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Ensure quarkus.datasource.jdbc.url (or reactive url) is set and that PostgreSQL dev services actually started (check dev console / logs)
- Re-enable dev services (quarkus.datasource.devservices.enabled=true) or configure an explicit URL
- Verify the datasource is Postgres and the app started in dev mode so DevServicesLauncherConfigResultBuildItem was produced
- Check earlier dev services log errors — a container startup failure will leave the URL keys unset
Example fix
// before # no url anywhere -> throws quarkus.datasource.devservices.enabled=false // after quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/mydb # or re-enable dev services # quarkus.datasource.devservices.enabled=true
Defensive patterns
Strategy: validation
Validate before calling
var cfg = devServicesLauncherConfigResultBuildItem.getConfig();
boolean hasUrl = cfg.containsKey("quarkus.datasource.jdbc.url")
|| cfg.containsKey("quarkus.datasource.reactive.url");
if (!hasUrl) throw new IllegalStateException("No JDBC or reactive datasource URL available for psql"); Try / catch
try {
psqlCommand.execute(invocation);
} catch (RuntimeException e) {
if (e.getMessage().contains("Unable to determine datasource URL")) {
// fall back to quarkus.datasource.jdbc.url from app config or instruct user to enable dev services
} else throw e;
} Prevention
- Set quarkus.datasource.jdbc.url explicitly when dev services are disabled
- Confirm PostgreSQL dev services started (dev console) before invoking psql
- Only run the psql command for Postgres datasources
When it happens
Trigger: Running the psql command integration in dev mode while the dev services config result contains neither quarkus.datasource.jdbc.url nor quarkus.datasource.reactive.url — e.g. dev services produced no URL because the datasource is disabled, misconfigured, or start failed.
Common situations: quarkus.datasource.devservices.enabled=false with no explicit jdbc.url; a dev services startup failure that skipped populating the config; using a datasource kind the command does not recognize; invoking the psql launch command for a non-PostgreSQL datasource.
Related errors
- Datasource <dataSourceName> does not have a JDBC URL and sho
- Cannot create a RunningDevServicesDatasource before the H2 d
- No instance of datasource found for persistence unit '%1$s'
- Illegal path:
- Unsupported OTEL protocol:
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/c44dbac62aa0824b.
Report an issue: GitHub.