Closed mapperr closed 10 months ago
We purposefully do not display the full connection string during the connection, as usql
is likely to be used in automated scripts where the password (or other sensitive connection details) would be captured by logging. If you need the full connection string after-the-fact, there is the \conninfo
command:
$ usql
Type "help" for help.
(not connected)=> \c postgres://postgres:P4ssw0rd@localhost/
Connected with driver postgres (PostgreSQL 16.0 (Debian 16.0-1.pgdg120+1))
pg:postgres@localhost=> \conninfo
Connected with driver postgres (host=localhost password=P4ssw0rd user=postgres)
pg:postgres@localhost=>
To answer your other inquiry, there are two forms of the \connect
(alias \c
) ccommand:
Connection
\c DSN connect to database url
\c DRIVER PARAMS... connect to database with driver and parameters
\Z close database connection
\password [USERNAME] change the password for a user
\conninfo display information about the current database connection
Specifically, you can bypass usql
's internal connection URL parsing (dburl
) and just pass whatever DSN connection you want:
(not connected)=> \c postgres user=postgres password=P4ssw0rd host=localhost
Connected with driver postgres (PostgreSQL 16.0 (Debian 16.0-1.pgdg120+1))
pg:=> \conninfo
Connected with driver postgres (user=postgres password=P4ssw0rd host=localhost)
pg:=>
You will need to research each underlying database drivers to figure out what the actual DSN would look like, as its different for each. For example, here's what a connection to MySQL looks like:
my:root@localhost=> \c my://root:P4ssw0rd@localhost
Connected with driver mysql (11.1.2-MariaDB-1:11.1.2+maria~ubu2204)
my:root@localhost=> \conninfo
Connected with driver mysql (root:P4ssw0rd@tcp(localhost:3306)/?loc=Local&parseTime=true&sql_mode=ansi)
Note however, that usql
mutates some database connection strings when using the URL form, in order to add the proper connection settings necessary to make the driver behave/be more compatible with usql
, such as the parseTime
, and sql_mode
parameters injected to the MySQL DSN. Note also that this is not an actual standard URL. You could copy/paste this and then connect with different parameters directly:
my:root@localhost=> \c mysql root:P4ssw0rd@tcp(localhost:3306)/
Connected with driver mysql (11.1.2-MariaDB-1:11.1.2+maria~ubu2204)
my:=> \conninfo
Connected with driver mysql (root:P4ssw0rd@tcp(localhost:3306)/)
For the most part, I would recommend using the URL form wherever possible, as it's much easier to read.
Hi!
thank you for usql, is awesome : )
I was wandering how to change database when connected to a postgres server, and I get that with psql we do a
\c <database_name>
.usql expects the whole db url, and I did not see a command to do the same as psql with just the db name, so I was thinking that maybe just changing the output of
conninfo
can be handy to copy paste and change the db without exiting usql.Here a patch:
so we can:
and copy paste the
\c postgres dbname=postgres host=myhost.com password=mypass port=5432 user=postgres
bit as\c postgres dbname=mydb host=myhost.com password=mypass port=5432 user=postgres
Makes sense to you?