# psql
 
* **sudo su - postgres**
* **psql**
    * -p 5432
    * parametros de conexión -h host, -U user, ...
* **Operadores de control**
    * **\?** -> Ayuda de operadores existentes
    * **\l** -> Listado de bases de datos
    * **\du** -> Listado de roles
    * **\c basededatos** -> Conectar a una base de datos
    * **\dt** -> Listado de relaciones
    * **\dp** -> Listado de privilegios
    
--- 

# Crear usuario y base de datos

* **Crear usuario**:
    * postgres=# create role usuario with login password 'xxxxxx';
* **Crear base de datos**:
    * postgres=# create database usuariodb with owner usuario;
* **Borrar usuario**:
    * postgres=# drop role usuario;
* **Borrar base de datos**:
    * postgres=# drop database usuariodb;
* **Conceder permisos de acceso a base datos para un usuario**
    * postgres=# grant all privileges on database usuariodb to usuario;

    
---

# Clustering

* Postgresql permite tener **varias instalaciones** para un **mismo servidor**
* Tiene algunas **utilidades** para manejar estas instalaciones
* Las utilidades de la documentación de postgres **no estan en el path**
* El paquete ubuntu introduce **otras utilidades** de más **alto nivel**
* En la documentación de postgres comenta por ejemplo:
    * **initdb** -> para crear un entorno nuevo en un directorio
    * **pg_controldata** -> muestra la información de una instalación
    * **pg_ctl** -> comandos de control de una instalación (initialize, start, stop)
    * **pg_upgrade** -> [Actualización entre versiones](http://www.postgresql.org/docs/9.3/static/pgupgrade.html) (muy útil)
# Presenter Notes

    !bash
    /usr/lib/postgresql/9.3/bin/pg_initdb /var/lib/postgresql/9.3/prueba/
    /usr/lib/postgresql/9.3/bin/pg_controldata /var/lib/postgresql/9.3/prueba/

    # Cambiar el puerto para que no coincida con una instalación existente en el postgresql.conf
    /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/prueba

    #Desde otra shell
    /usr/lib/postgresql/9.3/bin/pg_ctl stop -D /var/lib/postgresql/9.3/prueba


--- 

# Clustering (alto nivel)

* Es mejor manejar la creación de cluster con las utilidades de alto nivel
* postgres@apsl-edu:~$ **pg_createcluster 9.3 prueba --start**
    * Servicio en marcha en un puerto libre, con su config y datos separados
* postgres@apsl-edu:~$ **pg_lsclusters**
    * Listado de clusters activos
* postgres@apsl-edu:~$ **pg_dropcluster 9.3 prueba --stop **
    * Borrado de un cluster
    
# Presenter Notes

    !bash
    postgres@apsl-edu:~$ pg_createcluster 9.3 prueba --start
    Creating new cluster 9.3/prueba ...
    config /etc/postgresql/9.3/prueba
    data   /var/lib/postgresql/9.3/prueba
    locale es_ES.UTF-8
    port   5433

    postgres@apsl-edu:~$ pg_lsclusters
    Ver Cluster Port Status Owner    Data directory                 Log file
    9.3 main    5432 online postgres /var/lib/postgresql/9.3/main   /var/log/postgresql/postgresql-9.3-main.log
    9.3 prueba  5433 online postgres /var/lib/postgresql/9.3/prueba /var/log/postgresql/postgresql-9.3-prueba.log

    postgres@apsl-edu:~$ pg_dropcluster 9.3 prueba --stop
