# Breu guia d'ús de postgreSQL. Contenidor docker amb postgreSQL. ## Requisits Disposar del Docker Desktop prèviament instal·lat ## Passos per obtenir la imatge de postgres, configuracions i execució ### Fer el pull de la imatge de Postgres: Obriu una terminal (cmd o powershell si feu servir windows) i escriviu la següent ordre per descarregar la imatge oficial de Postgres: `docker pull postgres` ### Execució del contenidor de Postgres: Després de fer el pull, podeu executar el contenidor amb la següent ordre: `docker run -d --name postgres-container -e POSTGRES_PASSWORD=contrasenya -p 5432:5432 postgres` Aquesta comanda fa el següent: * *--name postgres-container* : assigna un nom al contenidor, en aquest cas li estem dient que el nom que tindrà és **postgres-container**. Podeu substituir-lo pel nom que volgueu. * *-e POSTGRES_PASSWORD=contrasenya* : estableix la contrasenya per l'usuari postgres. Substituiu **contrasenya** per la contrasenya que desitgeu. * *-p 5432:5432* : mapeja el port 5432 del contenidor al port 5432 de la vostra màquina. El primer 5432 correspon al port de la màquina (es pot canviar per un altre i fer que es mapegi a un altre), mentres que el segon 5432 és el port propi del postgres. * *postgres* : serveix per indicar que es vol utilitzar la imatge oficial de Postgres. La comanda anterior no especifica l'usuari, si es volgués fer hauríem d'escriure: ``` docker run -d --name postgres-container -e POSTGRES_USER=usuari -e POSTGRES_PASSWORD=contrasenya -p 5432:5432 postgres ``` On -e POSTGRES_USER=usuari serveix concretament per dir l'usuari amb el qual volem accedir amb plens permisos. ### Verificar que el contenidor està en funcionament: Podeu comprovar que el contenidor està corrent amb aquesta comanda: `docker ps` Al Docker Desktop podeu també identificar-ho així (mireu el pilot verd de l'esquerra al nom del contenidor): ![imatge](https://hackmd.io/_uploads/HJle18icJg.png) ### Accedir a la base de dades de Postgres: Per connectar-vos a la base de dades des de dins del contenidor (via la seva consola), utilitzeu aquesta comanda: `docker exec -it postgres-container psql -U postgres` Des del HeidiSQL podeu crear una connexió específica, especificant la ip (en aquest cas la ip és la corresponent al localhost, doncs el nostre contenidor hi és al localhost) i la contrasenya: ![imatge](https://hackmd.io/_uploads/H1GjJLocyg.png) Si a l'hora de fer el docker run hi haguèssiu ficat un usuari cal canviar l'usuari postgres que apareix per defecte per l'usuari especificat. ### Aturar i rearrencar Un cop deixeu de treballar amb el contenidor el podeu aturar fent: ``` docker stop postgres-container ``` I per tornar-lo a arrencar fer: ``` docker start postgres-container ``` Substituiu **postgres-container** pel nom que tingui el vostre contenidor. ## Primers passos d'ús del postgres Ja connectats el que es veurà és el següent prompt indicant que s'ha accedit a postgres: ``` postgres=# ``` * El prompt # significa que el sistema està llest, esperant instruccions * En cas que no finalitzeu una instrucció, com per exemple us falti el ';', veureu que el prompt serà `postgres-#`. Fins que no el fiqueu no executarà la instrucció i canviarà el prompt. * Si el que us falta és un parèntesi, veureu que el prompt serà `prova(#` i si el que us falten són cometes veureu `prova"#` * En cas de voler sortir d'aquest mode escriviu `\q` (és a dir, quit). * Crear una base de dades nova es fa igual que altres SGDB sql, és a dir: ``` postgres=# CREATE DATABASE prova; CREATE DATABASE ``` Un cop fet veureu que apareix el missatge CREATE DATABASE. * Per connectar-nos a una base de dades fem (similar al USE de mariadb/mysql): ``` \c prova ``` Veureu que el prompt canvia i ficarà el nom de la base de dades a la qual us heu connectat: `prova=#` * Per llistar les bases de dades existents fem **\l**: ``` List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges -----------+----------+----------+-----------------+------------+------------+--------+-----------+----------------------- DAM | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | prova | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | prova2 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | ``` Per sortir de la llista escrivim el caràcter **q**. * Per llistar les taules contingudes a la base de dades que estem connectats fem **\dt**: ``` List of relations Schema | Name | Type | Owner --------+-------+-------+---------- public | trens | table | postgres (1 row) ``` * Per llistar els indexos definits (mostra tots de totes les taules de la BD) fem un **\di**: ``` List of relations Schema | Name | Type | Owner | Table --------+---------------------+-------+----------+------- public | trens_desc_tren_key | index | postgres | trens public | trens_pkey | index | postgres | trens ``` * Altres comandes interessants: * `\h` ens mostra l'ajuda disponible en termes de comandes/instruccions (DML/DDL SQL) que es poden fer. * `\?` ens mostra l'ajuda a nivell de comandes meta del psql com les que acabem de veure adalt (\dt, \l, etc.).