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 Usuari
cd odoo
docker-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 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: Composició de contenidors
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/.