Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

Mostrando las entradas con la etiqueta Bases de Datos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Bases de Datos. Mostrar todas las entradas

martes, 18 de febrero de 2020

Actualizar Modulo en Multiples Bases de Datos - Odoo

Actualización de Modulos en multiples Bases de Datos




El dia de hoy traigo un Query que nos permite actualizar un modulo  en multiples Bases de Datos de Odoo corriendo en una misma instancia y versión de Odoo.

Script escrito en Bash con codigo Python:


#!/usr/bin/env python

from datetime import date
import subprocess, xmlrpclib, sys, os, psycopg2, pexpect

# Database info
db_user = 'odoo'
db_passwd = ''
db_host = 'localhost'
db_port = 5432
db_name = 'postgres'
oerp_conf = '/opt/odoo/odoo.conf'
oerp_bin = "/opt/odoo/odoo-bin"
module_to_upgrade = "modulo_a_actualizar"

today = date.today()
log_date = today.strftime('%Y%m%d')
log_name = "update-{}.log".format(log_date)
base_dir = os.getcwd()

with open(log_name, 'a+') as log_file:

  # Get list of databases
  db = psycopg2.connect(user=       db_user, 
                        password=   db_passwd,
                        host=       db_host,
                        port=       db_port,
                        database=   db_name)
  cr = db.cursor()
  cr.execute("select datname from pg_database where datdba=(select usesysid from pg_user where usename='{}') order by datname".format(db_user))
  dblist = [str(name) for (name,) in cr.fetchall()]

  for database in dblist:
    # Wait for server to upgrade database, then kill it
    print "Actualizando Base de Datos {}...".format(database)
    
    dbupdate_cmd = "{} shell -c {} --database={} --update={}".format(oerp_bin, oerp_conf, database, module_to_upgrade) 
    output = pexpect.spawn(dbupdate_cmd)
    try:
      # to catch this string loading.py was altered (line 461)
      output.expect('.*Modulos Cargados.', timeout=600)

    except pexpect.ExceptionPexpect as e:
      print "Se Agoto el tiempo de espera en la actualización {}. Intente actualizar Manualmente la Base de Datos con el comando '{}'.".format(database, dbupdate_cmd)
    output.kill(0)
    status = "Base de Datos Actualizada {}.".format(database)
    print status
    log_file.write(status + "\n")

Los Parametros principales a modificar son:

  • oerp_conf
    • Es la ruta del archivo de configuración de Odoo, normalmente se encuentra dentro de /etc/odoo/odoo-server.conf
  • oerp_bin
    • Ruta del programa de administración de Odoo, se encuentra dentro de la ruta de instalación del ERP.



Fuente: http://soft29.info/blog/entry/odoo-module-upgrade-on-multiple

jueves, 17 de mayo de 2018

Duplicar Base de Datos en 5 Minutos Odoo y PostgreSQL

Duplicar una base de datos a nivel directorio Fisico PostgreSQL


Todas las Bases de Datos creadas en Postgres son guardadas en archivos y directorios del Sistema Operativo, utilizando un metodo sencillo podemos duplicar una Base de Datos a nivel fisico.

1. Creamos nuestra Base de Datos copia

Creamos nuestra Base de Datos Copia por medio de terminal.

sudo su postgres

createdb BASE_2 -O odoo10

2. Verificamos el Nombre del Directorio

El ID origen llamado OID en el template de postgres, es el nombre del directorio que contiene tu Base de Datos, es necesario conocerlo para poder duplicar nuestra Base de Datos.

Obtenemos el OID de la Base Origen

sudo su postgres

psql template1

select datname,oid from pg_database where datname like 'BASE_ORIGEN';

Obtenemos el OID de la Base Destino

sudo su postgres

psql template1

select datname,oid from pg_database where datname like 'BASE_2';

3. Nos colocamos en el directorio de Postgres

En este ejemplo estoy utilizando PostgreSQL 9.6 y el ejemplo que mostrare es la ubicacion de mis bases de datos.

cd /var/lib/postgresql/9.6/main/base


4. Duplicamos el Directorio de la Base Origen

Es Importante que este proceso lo hagamos con el usuario postgres del Sistema Operativo.

El primer Base es Eliminar el Directorio de nuestra Base 2

rm -r OID_BASE_2


Como paso final duplicamos el directorio de la Base Origen a la Base 2 

cp OID_ORIGEN OID_BASE_2


Listo, con estos sencillos pasos obtenemos una copia de nuestra Base de Datos de una forma rapida y sin esperar.

Nota Importante: Es importante tambien, duplicar el directorio de archivos binarios (data_dir) de tu base de datos origen con el nombre de tu base de datos destino.

viernes, 10 de junio de 2016

Solucion de Error PostgreSQL Encoding Latin en lugar de UTF-8 y Unable to Login en Odoo


Cambiar Codificación Latin -> UTF-8 PostgreSQL & Odoo




    Este Error me causo conflicto al tratar de crear una Maquina Virtual para migrar una instancia de Odoo al instalar las dependencias que necesita este maravilloso ERP, el motor de Base de Datos (PostgreSQL) y por ultimo restablecer la Base de Datos, me di cuenta que no podĆ­a acceder a la base restablecida en la parte web me arrojaba el error "Unable to Login" y en el archivo log una serie de errores relacionados con los accesos a la base de datos.

Primero verifique mis bases de Datos con el comando:

sudo su postgres

psql -l


Veriamos algo similar a:

         Name            |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
----------------------------+-----------+----------+-------------+-------------+-----------------------
 Mi_Base_Odoo               | odoo      | LATIN1     | LATIN1 | LATIN1 | 
 postgres                   | postgres  | LATIN1     | LATIN1 | LATIN1 | 
 template0                  | postgres  | LATIN1     | LATIN1 | LATIN1 | =c/postgres          +
                            |           |          |             |             | postgres=CTc/postgres
 template1                  | postgres  | LATIN1     | LATIN1 | LATIN1 | =c/postgres          +


Este fue el problema principal por el que no podia acceder a mi Base de Datos, la solución fue cambiar la encodificación de la base principal de postgres y template1.

Ejecutaremos esta seria de comandos en la terminal de PostgreSQL, que bƔsicamente creara nuevamente la base principal de postgresq Template1:

sudo su postgres
psql
update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'
lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;
update pg_database set datistemplate=true where datname='template1';

Si nos muestra error en_US, instalamos:
locale-gen en_US.UTF-8 
Cambiamos el encoding de nuestra base postgres:

update pg_database set encoding=6 where datname='postgres';

Si necesitan conocer mas acerca de como asignar la codificación dejo esta imagen:



Ahora borramos y restauramos nuestra base de Datos y esta tendrÔ la codificación correcta.

En Ubuntu también debemos asignar Correctamente la codificación unicode.

1. Ejecutamos el comando que generara archivos locales con la codificación Unicode:

update pg_database set encoding=6 where datname='postgres';

2. Actualizamos el archivo /etc/default/locale con los valores correctos (o usamos update-locale LANG=xx LC_CTYPE=xx ...), si optamos por actualizar el archivo tendremos que poner estos cambios:

 $ sudo cat - > /etc/default/locale <<EOF
 LANG=en_US.UTF-8
 LANGUAGE=
 LC_CTYPE="en_US.UTF-8"
 LC_NUMERIC="en_US.UTF-8"
 LC_TIME="en_US.UTF-8"
 LC_COLLATE="en_US.UTF-8"
 LC_MONETARY="en_US.UTF-8"
 LC_MESSAGES="en_US.UTF-8"
 LC_PAPER="en_US.UTF-8"
 LC_NAME="en_US.UTF-8"
 LC_ADDRESS="en_US.UTF-8"
 LC_TELEPHONE="en_US.UTF-8"
 LC_MEASUREMENT="en_US.UTF-8"
 LC_IDENTIFICATION="en_US.UTF-8"
 LC_ALL=en_US.UTF-8
 EOF

Reiniciamos nuestro servidor Odoo y podemos trabajar de forma correcta.