Openbravo Forum End of Life Notice

Dear Openbravo Forum User,

Because of continued very low usage we decided to stop the forums on 31st of August 2017

In case of questions: webmaster "at" openbravo.com

Paso de Oracle a Postgres

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Tue Sep 22, 2009 6:23 pm

Paso de Oracle a Postgres





Buenas tardes,

 


He decido crear un nuevo hilo de comentario sobre la metodología para pasar la base de datos de Oracle a Postgres y que todo funcione correctamente en OpenbravoERP. La actualización se basa en dos puntos fundamentales:




  1. Paso de base de datos de Oracle a Postgres.




  2. Adaptar código SQL customizado para que funcione correctamente en Postgres.




Voy a entrar en detalle en cada uno de los puntos, sobre todo, debido a que el primero punto está centralizado en mi persona y quiero que tengáis visibilidad de dicha tarea, e incluso si queréis podáis hacer pruebas de como yo he realizado la misma, se trata de una tarea laboriosa pero que no tiene mayor complicación.




  1. Paso de base de datos de Oracle a Postgres. Las tareas a ejecutar son las siguientes:






  1. Localizar diferencias a nivel de base de datos comparando ficheros xml de la versión estándar y la versión de Verobsal21.




  2. Modificar el fichero Openbravo.properties para que la conexión a base de datos apunte a una base de datos Postgres. Ver el ejemplo, con el código comentado y el código añadido:


    # DB properties

    # bbdd.sid=XE

    # bbdd.systemUser=SYSTEM

    # bbdd.systemPassword=pruebas

    # bbdd.user=TAD_C21

    # bbdd.password=TAD_21

    # bbdd.driver=oracle.jdbc.driver.OracleDriver

    # bbdd.url=jdbc:oracle:thin:@localhost:1521:XE

    # bbdd.rdbms=ORACLE

    # bbdd.sessionConfig=ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-YYYY' NLS_NUMERIC_CHARACTERS='.,'

     

     

    bbdd.rdbms=POSTGRE

    bbdd.driver=org.postgresql.Driver

    bbdd.url=jdbc:postgresql://localhost:5432

    bbdd.sid=verobsal21

    bbdd.systemUser=postgres

    bbdd.systemPassword=postgres

    bbdd.user=tad_concordia

    bbdd.password=tad_concordia

    bbdd.sessionConfig=select update_dateFormat('DD-MM-YYYY')




  3. Ejecutar la tarea ant create.database desde línea de comandos o con eclipse. De esta forma desde los ficheros xml (en código Oracle) creamos la base de Datos en Postgres. Obtendremos diversos errores en la creación de la base de datos (en la versión 2.40 muchos menos errores que en versiones anteriores por la mejora de la herramienta dbSourceManager de importación/exportación de base de datos a ficheros xml)




  4. Por último, debemos corregir los errores encontrados en el create.database. Para ello, os recomiendo leer un link en la wiki donde se explican las diferencias de código Oracle y Postgres:


    http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Concepts/DB/PL-SQL_code_rules_to_write_Oracle_and_Postgresql_code


    http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Concepts/DB/PL-SQL_code_infrastructure




  5. Una vez repasados, todos los triggers, procedures y funciones localizados en el punto a), lo que haremos será una copia de los fichero xml originales para Verobsal21 de src-db.




  6. Ejecutamos ant export.database.




  7. Comparamos la carpeta src-db con la copia de la versión original de Verobsal21, y verificamos que no es perdido nada a nivel de estructura de base de datos y a nivel de diccionario. También podremos apreciar las diferencias entre el código anterior (Oracle) y el nuevo (Postgres).






 




  1. Adaptar código SQL customizado para que funcione correctamente en Postgres. Para ello:






  1. Primero localizar todos los fuentes nuevos y fuentes core customizados (ya realizado).




  2. Realizar un comile.complete para ver ficheros .xsql que dan error en compilación.




  3. Aplicar las correcciones sobre los ficheros que dan erron en compilación de acuerdo a las especificaciones de:


    http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Concepts/DB/PL-SQL_code_rules_to_write_Oracle_and_Postgresql_code


    http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide/Concepts/DB/PL-SQL_code_infrastructure




  4. Finalmente, repasar todos los ficheros .jrxml localizados en a) (recomiendo que con ireport) y corregir código sql de acuerdo al anterior link.




  5. Los sentencias UPDATE, INSERT y llamadas a PROCEDURES en ficheros .xsql no dan error en compilación, por tanto, repasar dichas sentencias para los ficheros localizados en a).




  6. Una vez compilada correctamente la aplicación, ejecutar el plan de pruebas.




 


Espero os sirva de ayuda, para cualquier duda no dudéis en contestar a través de el presente foro.


 


Muchas gracias.


Saludos


Javier

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Mon Sep 28, 2009 10:46 pm

RE:Paso de Oracle a Postgres

Hola a todos,


 


Ya he comitado los cambios de base en el repositorio de verobsal21 de datos de forma que os podeis actualizar (svn update), cambiar la conexión a base de datos para que apunte a Postgres y ejecutar el create.database.


Veréis cuando compiléis tras crear la base de datos, que dan error 5 ficheros en compilación:


     src/org/openbravo/erpCommon/ad_process/SendMailText_data.xsql

     src/org/openbravo/erpCommon/ad_callouts/CUS_Num_Days_data.xsql

     src/org/openbravo/erpCommon/ad_callouts/CUS_Date_Next_data.xsql

     src/org/openbravo/erpCommon/ad_reports/ReportCashflowForecast_data.xsql

     src/org/openbravo/erpCommon/ad_reports/ReportDebtPaymentTrack_data.xsql

 


Si tenéis algún problema con los errores que dá me lo comunicais porque los tengo bastante localizados. Posteriromente habrá que repasar UPDATE e INSERT's de fichero .xsql y las select de los .jrxml. Finalmente ejecutar el plan de pruebas.


Cualquier duda me la comentais a través del post.


Gracias


Un saludo


Javier

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Thu Oct 01, 2009 9:42 pm

RE:Paso de Oracle a Postgres

Hola,


 


He commitado unos cambios sobre los ficheros xml de base de datos para que funcione correctamente el ant create.database. Los ficheros commitados son:


Enviando       src-db/database/model/functions/CUS_APPROBE_BUDGET.xml

Enviando       src-db/database/model/functions/CUS_BPARTNER_MIGRATION.xml

Enviando       src-db/database/model/functions/CUS_ENABLE_BUDGET.xml

Enviando       src-db/database/model/functions/CUS_FP_BPARTNER_MIGRATION.xml

Enviando       src-db/database/model/functions/CUS_FP_INVOICE_MIGRATION.xml

Enviando       src-db/database/model/functions/CUS_GLJOURNAL_CO.xml

Enviando       src-db/database/model/functions/CUS_PAYROLL_CO.xml

Enviando       src-db/database/model/functions/CUS_PRODUCTOS_CO.xml

Enviando       src-db/database/model/functions/CUS_REQUISITION_CREATEPO.xml

Enviando       src-db/database/model/functions/PD_CREAR_OPERANDOS.xml

Enviando       src-db/database/model/functions/PD_IMPORT_INVOICE.xml

Enviando       src-db/database/model/tables/M_REQUISITION.xml

Enviando       src-db/database/model/triggers/CUS_APPROVED_YEAR_TRG.xml

Enviando       src-db/database/model/triggers/CUS_EXPENSES_TRG.xml

Enviando       src-db/database/model/triggers/CUS_TIMEEXPENSELINE_TRG.xml

 


Sería conveniente que os actualizaraís y crearais la base de datos a partir de esos ficheros o actualiceis la misma con esos ficheros, ya que se han cambiado algunas sentencias en triggers y funciones para que funciones correctamente el create.database y el export.database.


 


Cualquier duda ya sabéis...


Un saludo

<<

Ermengol Sansa Lago

Posts: 3

Joined: Fri Sep 18, 2009 10:10 am

Post Fri Oct 02, 2009 10:49 am

RE:Paso de Oracle a Postgres

Hola,


Revisando los archivos .jrxml, en la select de CusSeguimientoProjectGastosTotalTesting.jrxml, he encontrado una llamada a la función last_day. Como en postgre no existe ninguna función similar, he estado hablando con Jorge y hemos llegado a la conclusión de crearla en la BBDD. ¿Qué te parece Javi? ¿Tienes alguna otra solución?


Saludos.

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Fri Oct 02, 2009 10:53 am

RE:Paso de Oracle a Postgres

Buenos días,


Me parece una solución perfecta, recordar commitar después dicha función de acuerdo al proceso que ha explicado Jorge en otro post.


¿Habéis solucionado el problemilla del create.database?


Saludos


 

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Fri Oct 02, 2009 1:02 pm

RE:Paso de Oracle a Postgres

Hola de nuevo,


Dado que no se si habéis logrado crear la base de datos con la tarea ant create.database, os pido por favor, que no hagáis commit de la nueva función last_day, ya que para ello tenéis que hacer un ant export.database, y si tenéis la base de datos creada a partir del fichero de backup, se va a realizar mal dicho export.database. Recordad que realice unos cambios a esa base de datos para que fueran correctametne el export.database y el create.database.


Podéis mandarme dicha función (last_day) a mi y la incorporo yo a subversión.


Si que podéis hacer commit de las fuentes d pertenecientes a src, sin ningún problema.


Muchas gracias


Un saludo

<<

Ermengol Sansa Lago

Posts: 3

Joined: Fri Sep 18, 2009 10:10 am

Post Fri Oct 02, 2009 1:05 pm

RE:Paso de Oracle a Postgres

Hola,


 


Esta es la función last_day:


create or replace function last_day(date) returns date as 'select

cast(date_trunc("month", $1) + "1 month"::interval as date) - 1'

language sql;


 


Saludos.


 

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Sat Oct 03, 2009 12:57 pm

RE:Paso de Oracle a Postgres

Buenos días,


 


En lugar de la función que me pasastéis, he utilizado la siguiente función para last_day (http://wiki.postgresql.org/wiki/Date_LastDay):


CREATE OR REPLACE FUNCTION last_day(date)

RETURNS date AS
$$
SELECT
CASE WHEN mo IN (1,3,5,7,8,10,12)
THEN mon_start + 30 -- 31 days
WHEN mo IN (4,6,9,11)
THEN mon_start + 29 -- 30 days
WHEN MOD(yr, 4) != 0
OR (MOD(yr, 100) = 0 AND MOD(yr, 400) != 0)
THEN mon_start + 27 -- 28 days
ELSE mon_start + 28 -- 29 days
END
FROM (
SELECT EXTRACT(MONTH FROM $1)::int AS mo,
EXTRACT(YEAR FROM $1)::int AS yr,
DATE_TRUNC('MONTH', $1)::date AS mon_start
) sub
$$ LANGUAGE 'sql' IMMUTABLE STRICT;


Un saludo
<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Sat Oct 03, 2009 1:04 pm

RE:Paso de Oracle a Postgres

Perdón por el comentario de antes, he comprobado que ya teníamos creadas dos funciones last_day en la base de datos, que son la siguientes:


 


CREATE OR REPLACE FUNCTION last_day(date)

  RETURNS date AS

$BODY$select

cast(date_trunc('month', $1) + '1 month'::interval as date) - 1$BODY$

  LANGUAGE 'sql' VOLATILE

  COST 100;

ALTER FUNCTION last_day(date) OWNER TO tad_concordia;


 


CREATE OR REPLACE FUNCTION last_day(timestamp with time zone)

  RETURNS date AS

$BODY$select

cast(date_trunc('month', cast($1 AS date)) + '1 month'::interval as date) - 1$BODY$

  LANGUAGE 'sql' VOLATILE

  COST 100;

ALTER FUNCTION last_day(timestamp with time zone) OWNER TO tad_concordia;


 


 


Esa son las que utilizaremos.


 


Un saludo

<<

javier frances

Posts: 10

Joined: Tue Jun 09, 2009 2:46 pm

Post Mon Oct 05, 2009 11:05 am

RE:Paso de Oracle a Postgres

Hola de nuevo,







El pasado viernes se realizo el commit en verobsal 21 introduciendo todos los

cambios de base de datos existentes en las últimas modificaciones de

concordia21. Los ficheros commitados son:





Enviando      src-db/database/model/functions/CUS_FP_BPARTNER_MIGRATION.xml

Enviando       src-db/database/model/functions/CUS_GLJOURNAL_CO.xml

Enviando       src-db/database/model/functions/CUS_INVOICE_POST.xml

Enviando       src-db/database/model/functions/CUS_PAYROLL_CO.xml

Enviando       src-db/database/model/functions/CUS_PO_ORDER_POST1.xml

Enviando       src-db/database/model/functions/CUS_PRODUCTOS_CO.xml

Enviando       src-db/database/model/functions/CUS_SO_INVOICE_POST.xml

Enviando       src-db/database/model/functions/PD_CREAR_OPERANDOS.xml

Enviando      src-db/database/model/functions/PD_EMPLOYEE_COST_CALCULATION.xml

Enviando       src-db/database/model/tables/CUS_ACTIVITYFINANCER.xml

Enviando       src-db/database/model/triggers/CUS_APPROVED_YEAR_TRG.xml

Enviando       src-db/database/model/triggers/CUS_EXPENSES_TRG.xml

Enviando      src-db/database/model/triggers/CUS_TIMEEXPENSELINE_TRG.xml

Enviando       src-db/database/sourcedata/AD_COLUMN.xml

Enviando       src-db/database/sourcedata/AD_ELEMENT.xml

Enviando       src-db/database/sourcedata/AD_ELEMENT_TRL.xml

Enviando       src-db/database/sourcedata/AD_FIELD.xml

Enviando       src-db/database/sourcedata/AD_FIELD_TRL.xml

Enviando       src-db/database/sourcedata/AD_REF_TABLE.xml

Enviando       src-db/database/sourcedata/AD_TABLE.xml

Enviando       src-db/database/sourcedata/AD_TEXTINTERFACES.xml

Enviando       src-db/database/sourcedata/AD_TEXTINTERFACES_TRL.xml

Enviando       src-db/database/sourcedata/AD_TREENODE.xml

Enviando       src-db/database/sourcedata/AD_VAL_RULE.xml

Transmitiendo contenido de archivos ........................

Commit de la revisi&oacute;n 14856.





Por otro lado, también se commitaron los ficheros que se ven a continuación con las últimas modificaciones de concordia:



src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Invoice_data.xsql

src/org/openbravo/erpCommon/ad_actionButton/CreateFrom.java

src/org/openbravo/base/secureApp/VariablesSecureApp.java

 


Sería conveniente realizar svn update y crear de nuevo la base de datos y compilar.


Un saludo


Return to Discussion

Who is online

Users browsing this forum: No registered users and 1 guest

Website Terms


Designed by ST Software for PTF.