Skip to content

Database

Ves al directori de Odoo i elimima la instal.lació de l’activitat anterior {% link “/web/app/odoo/user/” %}

Terminal window
cd odoo
docker-compose down

Torna a instal.lar Oddo, amb les dades de Demo!

Terminal window
docker-compose up -d

Activa els mòduls d’empleats, (…) per tenir més taules i dades.

Per instal.lar odoo hem fet servir docker-compose.

La instal.lació d’odoo consisteix en dos contenidors, db i odoo:

Terminal window
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------
db docker-entrypoint.sh postgres Up 5432/tcp
odoo /entrypoint.sh odoo Up 0.0.0.0:8200->8069/tcp,:::8200->8069/tcp, 8071/tcp, 8072/tcp

Investiga que és docker i que és docker-compose: {% link “/linux/docker/compose/” %}

Entra al contenidor odoo:

Terminal window
docker exec -it odoo /bin/bash

Quan arranca el contenidor es crita el fitxer entrypoint.sh.

Mira el contingut d’aquest fitxer:

Terminal window
$ more /entrypoint.sh
...
# set the postgres database host, port, user and password according to the environment
# and pass them as arguments to the odoo process if not present in the config file
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}
...

En aquest fitxer pots veure entre altres coses la configruació d’odoo per accedir a la base de dades.

L’ultima acció del fitxer és executar l’aplicació odoo.

Si executes which odoo pots veure que el fitxer està localitzat a /usr/bin/odoo.

Si mires el contingut del fitxer odoo pots veure que es un script en python que importa el mòdul de python odoo:

$ more more /usr/bin/odoo
#!/usr/bin/python3
# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'
import odoo
if __name__ == "__main__":
odoo.cli.main()

Activitat. Mira on està el mòdul odoo.

Quan acabis surt del contenidor amb la comanda exit

El contenidor db té una base de dades postgres que és la que utilitza el contenidor odoo.

Entra al contenidor db:

Terminal window
docker exec -it db /bin/bash

Fes servir el client de postgres per conectarte al la base de dades.

La base de dades és odoo i l’usuari és odoo:

Terminal window
psql -d odoo -U odoo

Amb la comanda \d pots veure el llistat de totes les relacions:

$ \d
List of relations
Schema | Name | Type | Owner
--------+------------------------------------------------------+----------+-------
public | auth_totp_device | table | odoo
public | auth_totp_device_id_seq | sequence | odoo
public | auth_totp_wizard | table | odoo
...

Un munt de relacions!

Anem a contar quantes taules i vistes hi ha:

select count(*) from information_schema.tables;
count
-------
412
(1 row)

Com que he activat l’aplicació d’empleats tinc una taula de empleats:

Terminal window
\d hr_employee;
Table "public.hr_employee"
Column | Type | Collation | Nullable | Default
--------------------------------+-----------------------------+-----------+----------+-----------------------------------------
id | integer | | not null | nextval('hr_employee_id_seq'::regclass)
resource_id | integer | | not null |
company_id | integer | | not null |
resource_calendar_id | integer | | |
...

No està malament la taula !

Com que he carregat les dades de demostració la taula no està buida.

Anem a seleccionar tots els noms dels empleats:

select name from hr_employee;
name
------------------
Mitchell Admin
Ronnie Hart
Anita Oliver
...
(20 rows)

A continuació afegeix un treballador a la taula hr_employee:

Primer hem de veure quines columnes són obligatòries:

$ select column_name, data_type, column_default from information_schema.columns where table_name = 'hr_employee' and is_nullable = 'NO';
column_name | data_type | column_default
---------------+-------------------+-----------------------------------------
id | integer | nextval('hr_employee_id_seq'::regclass)
resource_id | integer |
company_id | integer |
employee_type | character varying |
(4 rows)

is_nullable no és de tipus booleà, sinò un varchar(3) per compatibilitat amb la “SQL 2011 spec”.

L’atribut id és la clau primària de la relació i es genera de manera automàtica.

Si mirem les claus foràneas podem veure que els atributs resource_id i company_id tenen restriccions d’integritat:

$ \d
...
"hr_employee_company_id_fkey" FOREIGN KEY (company_id) REFERENCES res_company(id) ON DELETE SET NULL
"hr_employee_resource_id_fkey" FOREIGN KEY (resource_id) REFERENCES resource_resource(id) ON DELETE RESTRICT

Sembla que el model de dades és aquest:

classDiagram
  class res_company {
    id integer
  }
  class resource_resource {
    id integer
  }
  class hr_employee {
    id interger nextval
    employee_type character varying
  }
  hr_employee --> res_company : company_id
  hr_employee --> resource_resource : resource_id

Mira la taula res_company:

$ select id, name from res_company;
id | name
----+-------------
1 | YourCompany

Mira la taula resource_resource:

$ select id, name from resource_resource;
id | name
----+------------------
1 | Mitchell Admin
2 | Ronnie Hart
...
(20 rows)

Sembla que les dades dades d’empleats estan en dues taules hr_employee i resource_resource!

Fes una còpia de seguretat de la base de dades

Terminal window
$ docker exec db bash -c "pg_dump -U odoo -Fc odoo > odoo.bak"
$ docker cp db:odoo.bak .
Successfully copied 2.26MB to /home/david/site/.

El contingut d'aquest lloc web té llicència CC BY-NC-ND 4.0.

©2022-2025 xtec.dev