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


Tal vez pueda interesarte


Compartí este artículo