In fact as the C library call PQconnectdb underlies this implementation, you can supply anything that this library call would take - the "pgsql:" prefix gets stripped off before PQconnectdb is called, and if you supply any of the optional arguments (e.g. user), then these arguments will be added to the string that you supplied... Check the docs for your relevant PostgreSQL client library: e.g.

I must say Chris C. is correct, yet sadly downvoted. It is irrelevant if semicolons are converted to spaces in the DSN string. The entire point of PDO is expressed in the first word of the acronym: "Portable"; it provides a uniform way of accessing databases of various flavors, and since a semicolon is its standard DSN delimiter, it SHOULD be used (at miniscule overhead if taking conversion into account, mind you) to facilitate uniformity and potentially ease portability.

I wanted to point out something that is not obvious from the documentation here or in any google searches that I've done. Everything after the 'pgsql:' is passed to the PQconnectdb function of the pgsql library as a connection string. This means 2 important key things:

1) 'username' is not a valid option of the PQconnectdb connection string. Use 'user' instead (ie 'user=<username>' instead of 'username=<username>'). 2) You can utilize ANY option of the PQconnectdb function in this way. For those trying to figure out how to enable ssl connections through the pgsql PDO connection process, like me, as per Postgresql standards, the 'sslmode' parameter can be set via the DSN. So, for example, 'sslmode=require' will require an ssl connection. Look at the documentation for the pgsql library version you are using for all options of both the sslmode parameter and any other parameters that are available.