La herramienta canónica para trabajar en modo línea de comandos con
PostgreSQL es psql. En este modo tenemos una herramienta completa
para poder manipular las bases de datos. Este programa cuenta con
ayuda en línea, por medio de la instrucción \?
, para los
comandos a psql y \h
para examinar la sintáxis de las
instrucciones de SQL.
También acepta opciones en la línea de comandos al momento de ejecución:
Usage: psql [options] [dbname] -a authsvc set authentication service -A turn off alignment when printing out attributes -c query run single query (slash commands too) -d dbName specify database name -e echo the query sent to the backend -E echo all queries sent to the backend -f filename use file as a source of queries -F sep set the field separator (default is '|') -h host set database server host -H turn on html3.0 table output -l list available databases -n don't use readline library -o filename send output to filename or (|pipe) -p port set port number -q run quietly (no messages, no prompts) -s single step mode (prompts for each query) -S single line mode (i.e. query terminated by newline) -t turn off printing of headings and row count -T html set html3.0 table command options (cf. -H) -u ask for a username and password for authentication -x turn on expanded output (field names on left)
Entre las opciones más útiles, están -h servidor (conexión al host servidor) y -d base (conexión a la base de datos base), en cuyo caso también podemos indicarle la opción -u para que nos solicite el usuario y la contraseña13.1, en caso de que nos conectemos como un usuario distinto al de la sesión actual:
mancha@caserola:~$ psql -h breogan -d agn -u Username: fml Password: Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL [PostgreSQL 6.5.3 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3]
Otra opción muy útil es -l para listar todas las bases existentes:
mancha@caserola:~$ psql -h breogan -l -u Username: fml Password: datname |datdba|encoding|datpath ------------+------+--------+------------ template1 | 100| 0|template1 postgres | 100| 0|postgres agn | 500| 0|agn root | 0| 0|root plpgsql_test| 0| 0|plpgsql_test dbarc | 500| 0|dbarc zapatos | 500| 0|zapatos pruebas | 500| 0|pruebas fml | 534| 0|fml mancha | 500| 0|mancha antiguedades| 500| 0|antiguedades discos | 500| 0|discos discuas | 500| 0|discuas hotpizza | 500| 0|hotpizza videos | 500| 0|videos poblacion | 500| 0|poblacion licencias | 500| 0|licencias (17 rows)
Una combinación realmente útil estas instrucciones es la siguiente:
psql -Htc 'select autor,titulo,ndis,medio from discos \ order by autor,titulo' discos \ | sed -e's/<table /<table border=2/' > tabla.de.discos.html
equivalente a:
psql -Htc 'select autor,titulo,ndis,medio from discos \ order by autor,titulo' -T 'border=2' -o tabla.de.discos.html discos
¿Puede el lector indicar qué hacen ambas acciones?
Cabe mencionar que psql utiliza la biblioteca readline de GNU, por lo cuál cuenta con edición en la línea de comandos.