Odoo utilitza una base de dades per organitzar tota la informació amb moltes taules, i on cada plugin incorpora les seves pròpies taules
Introducció
Ves al directori de Odoo i elimima la instal.lació de l’activitat anterior {% link “/web/app/odoo/user/” %}
cd odoodocker-compose down
Torna a instal.lar Oddo, amb les dades de Demo!
docker-compose up -d
Activa els mòduls d’empleats, (…) per tenir més taules i dades.
Docker
Per instal.lar odoo hem fet servir docker-compose
.
La instal.lació d’odoo consisteix en dos contenidors, db
i odoo
:
$ docker-compose psName Command State Ports-----------------------------------------------------------------------------------------------------------db docker-entrypoint.sh postgres Up 5432/tcpodoo /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/” %}
Contenidor odoo
Entra al contenidor odoo
:
docker exec -it odoo /bin/bash
Quan arranca el contenidor es crita el fitxer entrypoint.sh
.
Mira el contingut d’aquest fitxer:
$ 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
Contenidor db
El contenidor db
té una base de dades postgres que és la que utilitza el contenidor odoo
.
Entra al contenidor db
:
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
:
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:
\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)
Activitats
Afegir un empleat
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
!
Còpia de seguretat
Fes una còpia de seguretat de la base de dades
$ 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/.