Este artículo explica cómo crear rápidamente una base de datos PostgreSQL junto con su respectivo usuario desde línea de comandos, utilizando las herramientas createdb
y createuser
.
Al momento de crear y eliminar bases de datos PostgreSQL, comúnmente se utilizan sentencias SQL desde el cliente de línea de comandos psql
, o desde la herramienta pgAdmin. Sin embargo, existen además las herramientas de línea de comandos createdb
y createuser
, provistas por el paquete postgresql
, que permiten crear bases de datos y usuarios mucho más rápidamente.
createuser
crea un usuario/rol con el nombre especificado como parámetro:
postgres@debian:~$ createuser --help createuser creates a new PostgreSQL role. Usage: createuser [OPTION]... [ROLENAME] Options: -c, --connection-limit=N connection limit for role (default: no limit) -d, --createdb role can create new databases -D, --no-createdb role cannot create databases (default) -e, --echo show the commands being sent to the server -E, --encrypted encrypt stored password -g, --role=ROLE new role will be a member of this role -i, --inherit role inherits privileges of roles it is a member of (default) -I, --no-inherit role does not inherit privileges -l, --login role can login (default) -L, --no-login role cannot login -N, --unencrypted do not encrypt stored password -P, --pwprompt assign a password to new role -r, --createrole role can create new roles -R, --no-createrole role cannot create roles (default) -s, --superuser role will be superuser -S, --no-superuser role will not be superuser (default) -V, --version output version information, then exit --interactive prompt for missing role name and attributes rather than using defaults --replication role can initiate replication --no-replication role cannot initiate replication -?, --help show this help, then exit Connection options: -h, --host=HOSTNAME database server host or socket directory -p, --port=PORT database server port -U, --username=USERNAME user name to connect as (not the one to create) -w, --no-password never prompt for password -W, --password force password prompt Report bugs to <pgsql-bugs@postgresql.org>.
Es posible indicar el rol al que pertenecerá el usuario, junto con los permisos para crear bases de datos, loguearse, crear roles, iniciar replicación, o ser superusuario. Además se puede asignar una contraseña al usuario de manera interactiva.
createdb
crea una base de datos con el nombre especificado como parámetro:
postgres@debian:~$ createdb --help createdb creates a PostgreSQL database. Usage: createdb [OPTION]... [DBNAME] [DESCRIPTION] Options: -D, --tablespace=TABLESPACE default tablespace for the database -e, --echo show the commands being sent to the server -E, --encoding=ENCODING encoding for the database -l, --locale=LOCALE locale settings for the database --lc-collate=LOCALE LC_COLLATE setting for the database --lc-ctype=LOCALE LC_CTYPE setting for the database -O, --owner=OWNER database user to own the new database -T, --template=TEMPLATE template database to copy -V, --version output version information, then exit -?, --help show this help, then exit Connection options: -h, --host=HOSTNAME database server host or socket directory -p, --port=PORT database server port -U, --username=USERNAME user name to connect as -w, --no-password never prompt for password -W, --password force password prompt --maintenance-db=DBNAME alternate maintenance database By default, a database with the same name as the current user is created. Report bugs to <pgsql-bugs@postgresql.org>.
Es posible indicar el conjunto de caracteres (charset), collation (LC_COLLATE
, indica el ordenamiento de strings), clasificación (LC_CTYPE
, categorización de caracteres en mayúsculas, minúsculas, dígitos, etc.), y más. Si no se indica un nombre de base de datos, por defecto se crea una con el nombre del usuario actual.
Por ejemplo, necesitamos crear una base de datos y un usuario de Postgres para una nueva aplicación. Primero se crea el usuario "usr_linuxito":
postgres@debian:~$ createuser -S -D -R -P usr_linuxito
Se indica que no sea superusuario (-S
) y que no pueda crear bases de datos ni roles (-D -R
). Además se solicita una contraseña de manera interactiva (-P
).
Luego se crea la base de datos:
postgres@debian:~$ createdb -O usr_linuxito linuxito -E utf-8
La base de datos "linuxito" es propiedad del usuario "usr_linuxito" y utiliza codificación UTF-8.
Para los casos en los que tenemos múltiples instancias de Postgres por servidor, tanto createuser
como createdb
cuentan con las opciones de conexión tradicionales de psql
:
$ createuser -h localhost -p 5432 -U postgres ... $ createdb -h localhost -p 5432 -U postgres ...
Referencias