Mostrando entradas con la etiqueta exportar. Mostrar todas las entradas
Mostrando entradas con la etiqueta exportar. Mostrar todas las entradas

8/13/2013

Exportar calendario Outlook 2010 a Google Calendar y Google Calendar a Outlook



Cómo exportar calendarios de Microsoft Outlook 2010 a formato CSV para importarlos desde cualquier otro sistema de calendario que lo soporte. En concreto realizamos la exportación de Outlook 2010 e importamos en Google Calendar. También realizamos el proceso inverso, exportar de Google Calendar a formato iCal e importarlo en Outlook 2010. Mostramos como crear varios calendarios (independientes) en ambas plataformas.


1/22/2013

Exportar DataGridView a fichero CSV C# C Sharp

Exportar DataGridView a fichero CSV C# C Sharp


Explicamos cómo exportar el contenido de un DataGridView a un fichero de texto plano separado por punto y coma, que se puede abrir con Office Excel, OpenOffice Calc o con LibreOffice Calc, incluso con cualquier editor de texto plano (notepad, vi, nano).

            dlGuardar.Filter = "Fichero CSV (*.csv)|*.csv";
            dlGuardar.FileName = "Datos_sqlite";
            dlGuardar.Title = "Exportar a CSV";
            if (dlGuardar.ShowDialog() == DialogResult.OK)
            {
                StringBuilder csvMemoria = new StringBuilder();

                //para los títulos de las columnas, encabezado
                for (int i = 0; i < dbTabla.Columns.Count; i++)
                {
                    if (i == dbTabla.Columns.Count - 1)
                    {
                        csvMemoria.Append(String.Format("\"{0}\"",
                            dbTabla.Columns[i].HeaderText));
                    }
                    else
                    {
                        csvMemoria.Append(String.Format("\"{0}\";",
                            dbTabla.Columns[i].HeaderText));
                    }
                }
                csvMemoria.AppendLine();


                for (int m = 0; m < dbTabla.Rows.Count; m++)
                {
                    for (int n = 0; n < dbTabla.Columns.Count; n++)
                    {     
                        //si es la última columna no poner el ;
                        if (n == dbTabla.Columns.Count - 1)
                        {
                            csvMemoria.Append(String.Format("\"{0}\"",
                                 dbTabla.Rows[m].Cells[n].Value));
                        }
                        else
                        {
                            csvMemoria.Append(String.Format("\"{0}\";",
                                dbTabla.Rows[m].Cells[n].Value));
                        }
                    }
                    csvMemoria.AppendLine();
                }
                System.IO.StreamWriter sw =
                    new System.IO.StreamWriter(dlGuardar.FileName, false,
                       System.Text.Encoding.Default);
                sw.Write(csvMemoria.ToString());
                sw.Close(); 
            }
Donde:
* dlGuardar: componente de tipo SaveFileDialog.
* dbTabla: componente de tipo DataGridView con los datos a exportar a fichero.

12/05/2012

Exportar ListView a fichero CSV C# CSharp

Exportar ListView a fichero CSV C# Proyecto AjpdSoft


Explicamos cómo exportar el contenido de un ListView con varias columnas a un fichero de texto plano separado por punto y coma, que se puede abrir con Office Excel, OpenOffice Calc o con LibreOffice Calc, incluso con cualquier editor de texto plano (notepad, vi, nano).


dlGuardar.Filter = "Fichero CSV (*.csv)|*.csv";
            dlGuardar.FileName = "Lista PDF Nóminas";
            dlGuardar.Title = "Exportar a CSV";
            if (dlGuardar.ShowDialog() == DialogResult.OK)
            {
                StringBuilder csvMemoria = new StringBuilder();
                foreach (ColumnHeader columnasLista in lsPDF.Columns)
                {
                    csvMemoria.Append(String.Format("\"{0}\";", columnasLista.Text));
                }
                csvMemoria.AppendLine();
                foreach (ListViewItem elementosLista in lsPDF.Items)
                {
                    foreach (ListViewItem.ListViewSubItem lvs in elementosLista.SubItems)
                    {
                        if (lvs.Text.Trim() == string.Empty)
                            csvMemoria.Append("\"\";");
                        else
                            csvMemoria.Append(String.Format("\"{0}\";", lvs.Text));
                    }
                    csvMemoria.AppendLine();
                }
                System.IO.StreamWriter sw =
                    new System.IO.StreamWriter(dlGuardar.FileName, false,
                       System.Text.Encoding.Default);
                sw.Write(csvMemoria.ToString());
                sw.Close();
Donde: 

  • dlGuardar: será un componente no visual de tipo SaveFileDialog.
  • lsPDF: ListView.

2/17/2012

Cómo exportar una máquina virtual de VMware Workstation 7 a VMware ESXi 5



Tutorial sobre cómo exportar una máquina virtual de VMware Workstation 7 (instalado sobre Microsoft Windows 7) a un servidor con VMware ESXi 5.



Requisitos para exportar máquina de VMware Workstation a VMware ESXi

Los requisitos obvios para exportar una máquina virtual existente en VMware Workstation a un servidor con VMware ESXi son los siguientes:
  • Disponer del equipo con un sistema operativo anfitrión (sea Windows ó Linux), con VMware Workstation instalado y la máquina virtual que queramos enviar a un ESXi. La máquina virtual debe estar detenida (apagada) no puede estar ni pausada ni iniciada.
  • Por otro lado necesitaremos el servidor con VMware ESXi que será el destino donde se importe la máquina virtual procedente de VMware Workstation. En este servidor deberemos tener espacio suficiente para alojar la máquina virtual. En el siguiente artículo explicamos cómo instalar VMware ESXi y cómo administrarlo con VMware vSphere Client:

Exportar máquina virtual de VMware Workstation a VMware ESXi

Desde el equipo con VMware Workstation y la máquina virtual que queramos exportar abriremos VMware Workstation, comprobaremos que la máquina virtual que queremos exportar está detenida (no puede estar ni pausada ni iniciada) y accederemos al menú "File" - "Import or Export":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Se iniciará el asistente para convertir máquinas virtuales (máquina físicas a virtuales, virtuales a virtuales, virtuales en appliances a virtuales, etc.). Pulsaremos "Siguiente":
 
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Pulsaremos "Siguiente" para iniciar el primer paso que será elegir el origen:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
En el desplegable "Select the type of source you want to use" seleccionaremos "Other" (A VMware Workstation virtual machine, VMware Consolidated Backup (VCB), third-party virtual machine, or third party disk image):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Pulsaremos en el botón "Browse" para seleccionar el fichero de la máquina virtual que importaremos en VMware ESXi:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Abriremos la carpeta donde se encuentren los ficheros de la máquina virtual que queremos convertir de VMware Workstation a VMware ESXi, seleccionaremos el fichero "vmx" que contiene la máquina virtual:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Una vez seleccionada la máquina virtual de VMware Workstation pulsaremos "Siguiente":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Como hemos comentado al principio, si la máquina virtual origen de VMware Workstation está iniciada o pausada, el asistente mostrará el siguiente error indicando que la máquina origen debe estar apagada:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Con el texto: Unable to convert a virtual machine while it is powered on or suspended. Shutdown and power off the virtual machine before converting it.
Seleccionaremos el disco o discos de la máquina virtual origen que queramos convertir a VMware ESXi (podremos redimensionarlos si así lo estimamos marcando "Select volumes and resize to save or add space", si no marcaremos "Convert all disk and maintain size"):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Pulsaremos "Siguiente" para iniciar el segundo paso (elegir el destino de la conversión de la máquina virtual VMware Workstation):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
En el desplegable "Select the destination type" elegiremos "VMware Infrastructure Virtual Machine" (The virtual machine is stored in VMware VirtualCenter, or a VMware ESX Server):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Introduciremos la IP, el usuario y la contraseña (Server, User name, Password) del servidor destino con VMware ESXi:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Introduciremos un nombre para la nueva máquina virtual que se creará en VMware ESXi, por ejemplo "Linux Ubuntu 10 AjpdSoft":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Si tenemos varios host (servidores) ESXi podremos elegir a continuación en qué servidor o pool de servidores se iniciará esta máquina virtual (a qué servidor se le asignará). Puesto que tenemos sólo uno lo seleccionaremos "localhost.localdomain" y pulsaremos "Siguiente":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Seleccionaremos el datastore en el que se almacenarán los ficheros de la nueva máquina virtual si tenemos varios, en nuestro caso tenemos ólo uno "datastore1", lo seleccionaremos y pulsaremos "Siguiente":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Seleccionaremos los adaptadores de red para la nueva máquina virtual:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Pulsaremos "Siguiente" pues en este paso nos indica que podemos personalizar el sistema operativo huésped, que no será necesario (identidad de la máquina virtual como hostname, configuración de red y permitir también eliminar los posibles puntos de restauración que pudiera tener):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Antes de iniciar el proceso final de conversión de máquina virtual VMware Workstation a VMware ESXi el asistente nos mostrará un resumen de las opciones elegidas. Si son correctas pulsaermos en "Finalizar" para iniciar el proceso:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Se iniciará el proceso de creación de la máquina virtual en el servidor VMware ESXi y el traspaso de la información de VMware Workstation a ESXi:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Si accedemos a la administración del servidor VMware ESXi por ejemplo mediante VMware vSphere Client podremos ver la nueva máquina virtual creada:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
El proceso puede tardar entre 5 y 50 minutos en función del tamaño de la máquina virtual a convertir y de la velocidad de la red y del servidor
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Una vez finalizado el proceso ya tendremos disponible la máquina virtual de VMware Workstation en el servidor VMware ESXi. Podremos iniciciarla pulsando con el botón derecho del ratón sobre ella y seleccionando "Power" - "Power On":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Si todo es correcto se iniciará la máquina virtual en ESXi y ya dispondremos de un nuevo equipo virtual, en nuestro caso con Linux Ubuntu:
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
Para consultar los ficheros de la nueva máquina virtual convertida desde VMware Workstation a VMware ESXi en el servidor ESX, seleccionaremos el servidor, en la pestaña "Summary" pulsaremos con el botón derecho del ratón sobre el datastore usado y seleccionaremos "Browse Datastore":
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi
El asistente de conversión de Workstation a ESXi habrá creado una carpeta con el nombre de la máquina virtual, dentro de ella podremos ver los ficheros creados (.vmx, .vmdk, .nvram, .log, .vmxf, .vmsd):
Exportar máquina virtual de VMware Workstation e importarla en VMware ESXi

Artículos relacionados


Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.

1/09/2012

Cómo exportar archivo de parámetros de Oracle actual SPFILE

Cómo exportar archivo de parámetros de Oracle actual SPFILE

Explicamos cómo exportar el achivo de parámetros de Oracle SPFILE a un PFILE, explicamos la diferencia entre el PFILE y el SPFILE y cómo iniciar Oracle con un fichero PFILE.

1/22/2011


Explicamos en este artículo cómo importar o convertir un fichero de texto plano separado por comas o punto y coma (con formato CSV) a una base de datos Microsoft Access, pasando previamente por Microsoft Excel.


 

Ficheros CSV

Los ficheros CSV (Comma-Separated Values ó valores separados por coma) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles.
El formato CSV es muy sencillo y no indica un juego de caracteres concreto, ni cómo van situados los bytes, ni el formato para el salto de línea. Estos puntos deben indicarse muchas veces al abrir el fichero, por ejemplo, con una hoja de cálculo.
Por ejemplo:

"Proyecto AjpdSoft";"21/01/2011";"http://www.ajpdsoft.com";"14000";"Aplicaciones gratuitas, open source"

Cómo importar un fichero csv de texto plano a Microsoft Excel xls ó xlsx

Como ejemplo crearemos un fichero csv de texto plano en el sistema operativo Microsoft Windows 7 con el siguiente contenido:
"AJ Soluciones informáticas";"01/09/2010";"http://www.ajsolucionesinformaticas.com";"100";"Imágenes"
"Laboratorio AjpdSoft";"10/01/2011";"http://www.proyectoa.com";"10000";"Laboratorio de pruebas de AjpdSoft"
"Proyecto AjpdSoft";"21/01/2011";"http://www.ajpdsoft.com";"14000";"Aplicaciones gratuitas, open source"
Para realizar la importación o conversión del fichero CSV abriremos Microsoft Excel, abriremos la ficha "Datos" y pulsaremos en "Obtener datos externos", seleccionaremos "Desde texto":
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
Seleccionaremos el fichero con formato CSV, en nuestro caso "Dominios AjpdSoft.csv" y pulsaremos "Importar":
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
Nos mostrará el asistente para importar texto, en primer lugar seleccionaremos los siguientes datos:
  • Tipo de los datos originales: seleccionaremos el formato del tipo de archivo, o bien delimitado (por comas o punto y coma) o bien de ancho fijo (normalmente espacios o tabuladores). En nuestro caso seleccionaremos "Delimitados".
  • En "Comenzar a importar en la fila" introduciremos "1" y en "Origen del archivo" seleccionaremos "Windows (ANSI)".
Pulsaremos "Siguiente" para continuar:
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
A continuación indicaremos el separador usado en nuestro fichero csv, en nuestro caso "Punto y coma". Los separadores permitidos:
  • Tabulación.
  • Punto y coma..
  • Coma.
  • Espacio.
  • Otro carácter
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
A continuación el asistente nos pemitirá elegir el tipo de datos básico para cada columna. Por ejemplo, si pulsamos en la columna que incluye una fecha podremos indicar en "Formato de los datos en columnas" el tipo de datos "Fecha", con formato "DMA" (día, mes y año). Seleccionaremos el tipo de datos para cada columna y pulsaremos "Finalizar":
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
Introduciremos en qué fila y en qué columna queremos insertar los datos y pulsaremos "Aceptar":
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
Microsoft Excel nos mostrará los datos importados del fichero CSV
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx
Pulsaremos en "Guardar" para guardar los datos CSV a formato Microsoft Excel (hoja de cálculo xls ó xlsx):
AjpdSoft Cómo importar un fichero csv de texto plano a Microsoft 
Excel xls ó xlsx

Importar fichero de Excel xls xlsx a Access mdb mdbx

A continuación vamos a convertir un fichero en formato Microsoft Excel (hoja de cálculo xls ó xlsx) a base de datos Microsoft Access. Realizaremos la importación de los datos de una hoja de un libro de Microsoft Excel a una tabla de una base de datos Microsoft Access, todo ello de forma automática usando el asistente de importación de Microsoft Access.
En primer lugar abriremos Microsoft Access, en nuestr ocaso la versión 2007, aunque para el resto de versiones el proceso es similar. Pulsaremos en "Nueva base de datos en blanco", introduciremos la ruta y el nombre de la carpeta donde se guardará el fichero Access accdb, en nuestro caso "Dominios AjpdSoft.accdb" y pulsaremos "Crear":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Desde la ficha "Datos externos", pulsaremos en "Excel" (Importar a una hoja de cálculo de Excel: importa o vincula datos de un archivo de Microsoft Office Excel):
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Se iniciará el asistente para obtener datos externos de Microsoft Access, en "Nombre de archivo" pulsaremos en "Examinar" para seleccionar el archivo Microsoft Office Excel origen:
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Seleccionaremos el fichero Microsoft Office Excel que contiene los datos CSV que importamos en este paso, en nuestro caso "Dominios.xlsx":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
A continuación podremos elegir el tipo de importación a realizar, podremos seleccionar las siguientes positibilidades:
  • Importar el origen de datos en una nueva tabla de la base de datos actual: si la tabla especificada no existe, Access la creará. Si la tabla especificada ya existe, Access puede sobreescribir el contenido con los datos importantes. Los cambios realizados en los datos de origen no se reflejarán en la base de datos.
  • Anexar una copia de los registros a la tabla "nombre_tabla": si la tabla especificada ya existe, Access agregará los registros a la tabla. Si la tabla no existe, Access la creará. Los cambios realizados en los datos de origen no se reflejarán en la base de datos.
  • Vincular al origen de datos creando una tabla vinculada: Access creará una tabla que mantendrá un vínculo a los datos de origen en Excel. Los cambios realizados en los datos de origen de Excel se reflejarán en la tabla vinculada. Sin embargo, los datos de origen no se pueden modificar en Access.
En nuestro caso, puesto que es una base de datos nueva y puesto que no queremos vincular el contenido sino importarlo y usar los datos en Access seleccionaremos "Importar el origen de datos en una nueva tabla de la base de datos actual":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Seleccionaremos la hoja del libro de Excel que contiene los datos a Importar, en nuestro caso "Dominios_AjpdSoft", marcando la opción "Mostrar hojas de trabajo". Pulsaremos "Siguiente" para continuar:
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Marcaremos la opción "Primera fila contiene encabezados de columna" si en la hoja de Excel hemos añadido encabezados a las columnas, en caso contrario no la marcaremos y pulsaremos "Siguiente":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
A continuación el asistente para importación de hojas de cálculo nos permitirar seleccionar el tipo de datos Access para cada columna (campo) de Excel. Por ejemplo, seleccionando la columna "nombre" podremos indicar los siguientes datos para el campo que se creará en la tabla de Access:
  • Nombre de campo: nombre que se le dará al campo de la tabla de Access que se creará.
  • Indexado: crear índice para este campo, las posibilidades:
    • No: no se creará índice para este campo.
    • Sí (Con duplicados): creará un índice para acelerar las búsquedas, pero se permitirán datos duplicados.
    • Sí (Sin duplicados): creará un índice que, además, no permitirá datos duplicados en los registros.
  • Tipo de dato: seleccionaremos el tipo de dato para el campo actual, las posibilidades: Texto, Sí/No, Byte, Entero, Entero largo, Moneda, Simple, Doble, Fecha/Hora, Memo, Hipervínculo.
  • "No importar el campo (Saltar): si no queremos importar la columna seleccionada marcaremos este check.
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Realizaremos el proceso de seleccionar el tipo de datos para todos los campos de la hoja de cálculo Excel. En el ejemplo, crearemos un índice sin duplicados para el campo "web":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
A continuación podremos crear una clave principal (clave primaria o primary key) para la tabla que se importará. Es recomendable que todas las tablas tengan una clave primaria, en el ejemplo usaremos el campo "web" como clave primaria, por lo que seleccionaremos "Elegir la clave principal y seleccionaremos "web". Las posibles opciones son:
  • Permitir a Access agregar la clave principal: el asistente de importación de hojas de cálculo creará un campo nuevo llamado "Id" con tipo de datos "Autonumérico" y lo establecerá como clave primaria (primary key).
  • Elegir la clave principal: con esta opción podremos elegir de entre los campos que se importarán. Hay que tener en cuenta que la clave principal debe ser un campo que contenga valores y que estos sean siempre diferentes, pues no permitirá duplicados.
  • Sin clave principal: no se creará clave principal para la tabla importada.
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Por último, para que el proceso finalice y se inicie la importación, introduciremos el nombre de la tabla de Access que se creará con los datos importados de Excel y pulsaremos "Finalizar". Si queremos que se inicie el asistente para analizar la estructura de la tabla marcaremos la opción "Desearía que el asistente analizara la estructura de la tabla después de importar los datos":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
El asistente para analizar la estructura permite crear tablas vinculadas a la principal a partir de campos con valores "repetidos". Por ejemplo, si tenemos un fichero Excel con esta estructura:

"Nombre cliente 1", "Importe 1", "Número factura 1"
"Nombre cliente 2", "Importe 2", "Número factura 2"
"Nombre cliente 3", "Importe 3", "Número factura 3"
"Nombre cliente 2", "Importe 4", "Número factura 4"
"Nombre cliente 3", "Importe 5", "Número factura 5"
El asistente para analizar la estructura de las tablas permitirá crear dos tablas, una de "facturas" y otra de "clientes" y vinculará ambas por una clave foránea. En nuestro ejemplo sólo queremos crear una tabla por lo que no usaremos el asistente para analizar la estructura de las tablas. Pulsaremos "No" en el mensaje:
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx


Con el texto: "El asistente ahora está preparado para analizar los nuevos datos de la tabla. ¿Desea continuar?".
Por último, el asistente de Microsoft Office Access para obtener datos externos nos permitirá guardar los pasos de la importación para futuras importaciones. Para ello marcaremos el check "Guardar pasos de importación" y en "Guardar como" introduciremos un nombre descriptivo. Pulsaremos en "Guardar importación":
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Tras la importación, desde Microsoft Office Access, podremos acceder a los datos importados, tanto al diseño de la tabla que el asistente habrá creado:
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Como a la consulta y modificación de los datos importados desde Excel:
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Si se produce algún error de importación, el asistente creará una tabla llamada "nombre_tabla_importacion$_ErroresDeImportación" con la estructura:
  • Campo: nombre del campo en el que se ha producido el error.
  • Error: descripción del motivo por el cual no se ha podido realizar la importación de los datos de este registro.
  • Fila: número de fila en la que se produce el error.
AjpdSoft Importar fichero de Excel xls xlsx a Access mdb mdbx
Nota: hay que tener en cuenta que Microsoft Office Access permite realizar importaciones desde casi cualquier origen de datos, incluido, por supuesto, CSV, por lo que no sería necesario pasar de CSV a Excel y de Excel a Access, es posible pasar de CSV a Access directamente.

 

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.

11/14/2010


Explicamos cómo migrar un servidor de base de datos MySQL Server a un servidor de base de datos PostgreSQL. Explicamos cómo convertir manualmente un fichero de script SQL generado con mysqldump para ser ejecutado y exportado a PostgreSQL. Explicamos cómo hacer la copia de seguridad en MySQL y cómo importarla (tras su adaptación) a PostgreSQL. Mostramos una tabla de correspondencias entre tipos de datos MySQL y PostgreSQL.


 

¿Por qué migrar de MySQL Server a PostgreSQL? MySQL vs PostgreSQL

Existen multitud de motivos para cambiar nuestro motor de base de datos de MySQL Server a PostgreSQL. A continuación expondremos algunos de ellos. Aunque hay que hacerlo con precaución y conocimiento de causa, pues es un paso importante y delicado.
No existe un motor de base de datos mejor que otro, existe nuestro entorno y el motor de base de datos que mejor se adapte a él, según nuestras exigencias. Por lo que la decisión de migrar de un motor de base de datos a otro es muy personal.
PostgreSQL es un motor de base de datos mucho más robusto que MySQL, posee una estructura al estilo de Oracle y es Open Source y gratuita, con licencia GPL. En cambio MySQL tiene un sistema de licenciamiento dual, posee una parte privada y otra GPL. Si bien MySQL es un proyecto Open Source, desde su adquisición por parte de Oracle se ha parado bastante. Casi no salen nuevas versiones ni mejoras.
Algunas de las ventajas (pros) de PostgreSQL:
  • Ejecución eficaz tanto de SQL estático (por ejemplo, PHP) como de SQL parametrizado (por ejemplo, de Java).
  • Optimizador avanzado basado en costo, con opciones de planes de ejecución y recopilación de estadísticas para personalización.
  • Indexación parcial, funcional, de múltiples índices combinados, con cuatro tipos de índice diferentes.
  • Sistema de compresión de datos TOAST (The Oversized-Attribute Storage Technique).
  • Gran escalabilidad al ampliar el número de procesadores o la memoria RAM.
  • Soporta rollback, subconsultas, transacciones y control de integridad referencial.
  • Soporta triggers y procedimientos almacenados.
  • Soporta tipos de datos para sistemas SIG ó GIS (Sistema de Información Geográfica).
  • Tiene licencia BSD, mucho más permisiva que la GPL.
  • El desarrollo de PostgreSQL no está controlado por una empresa, sino que es dirigido por una comunidad de desarrolladores que trabajan de forma desinteresada, altruista, libre y/o apoyados por organizaciones comerciales. Es un proyecto en contínua actualización, lanzando nuevas versiones con muchas mejoras cada cierto tiempo.
  • Posee casi todas las características de otros motores de base de datos comerciales como Oracle, Microsoft SQL Server, Informix.
  • Utiliza control de concurrencia multi-versión.
  • Totalmente conforme a ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad) en sus transacciones.
Algunos inconvenientes (contras) de PostgreSQL:
  • Consume bastantes recursos en el equipo donde se instala.
  • Es más lento en consultas SELECT que MySQL, aunque no en todos los casos y configuraciones.
Para el caso de MySQL, exponemos algunas de sus ventajas (pros):
  • En determinadas configuraciones con el motor MyISAM puede ser muy rápido, sobre todo en consultas SELECT.
  • Soporta múltiples motores de almacenamiento: MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole y Example en 5.x, permitiendo al usuario escoger la que sea más adecuada para cada tabla de la base de datos, dependiendo del uso que se le vaya a dar.
  • Agrupación de transacciones, reuniendo múltiples transacciones de varias conexiones para incrementar el número de transacciones por segundo.
  • MySQL Embedded Database.
  • Suele consumir pocos recursos del equipo donde se instala, en función de la configuración elegida.
  • Existen multitud de aplicaciones para la administración de MySQL.
Algunos inconvenientes (contras) de MySQL:
  • Ante todo la adquisición de MySQL por parte de Oracle no deja claro su futuro. No queda claro si se seguirá el desarrollo de MySQL con nuevas versiones con mejores y más características.
  • Facilidad de uso y configuración: MySQL es bastante más sencilla de administrar y configurar que PostgreSQL.
  • Hasta la versión 6 que sigue en estado alpha no soporta integridad referencial.
  • De momento no implementa una buena escalabilidad por lo que no es aconsejable para grandes bases de datos.
En resumen, cada motor de base de datos será interesante para cada situación. La elección del motor de base de datos a usar es muy personal y dependerá de las necesidades y uso que se le vaya a dar. Por ejemplo, para una empresa que quiera montar un servidor web con un sitio web dinámico que sea muy rápido y requiera de pocas modificaciones e inserciones se recomienda MySQL con el motor MyISAM. En cambio, para empresas que requieran de un robusto motor de base de datos con muchas modificaciones e inserciones concurrentes será conveniente usar PostgreSQL.
Así pues no nos podemos decantar por un motor u otro, pues sería un error, cada motor tiene sus ventajas y sus inconvenientes.


Consejos iniciales antes de la migración de MySQL a PostgreSQL

Por supuesto, no en todos los entornos es recomendable cambiar o migrar de MySQL a PostgreSQL. Por ejemplo, en casos de servidores web con Apache, MySQL y PHP, no siempre es recomendable pasar de MySQL a PostgreSQL. MySQL puede ser más rápido en determinados entornos que PostgreSQL. Sobre todo cuando no hay muchas inserciones (INSERT) o modificaciones (UPDATE), cuando hay muchas consultas. En este caso, usando MyISAM de MySQL pueden obtenerse mejores resultados que con PostgreSQL.
Y repetimos, no es conveniente migrar por migrar de un motor de base de datos a otro, conviene estudiar bien las características de cada uno y analizar las que mejor se adapten a nuestro entorno. Hay que tener en cuenta que el uso que se le da a cada base de datos en cada organización o empresa es muy personal. Por ejemplo, una empresa dedicada a la contabilidad y facturación no tendrá los mismos requisitos que una empresa dedicada a servicios web.
Por ello, antes de lanzarse a realizar un cambio de estas dimensiones, es fundamental analizar y realizar las pruebas pertinentes de rendimiento, productividad y disponibilidad en entornos de virtualización. Así garantizaremos que el cambio será exitoso, de lo contrario podremos tener "sorpresas" desagradables.

Copia de seguridad de MySQL Server lógica (a fichero SQL)

Por supuesto y como siempre hemos de realizar copia de seguridad de los datos de MySQL. Vamos a explicar cómo hacer una copia lógica (exportación de los datos a fichero SQL). Esta copia será la usada para la migración o importación a PostgreSQL, usaremos el fichero generado aquí y lo adaptaremos para poder ser ejecutado en PostgreSQL.
Para realizar una copia de seguridad lógica podremos usar cualquier aplicación del mercado o alguna gratuita. Por ejemplo, podremos usar AjpdSoft Copia Seguridad MySQL, como indicamos en el siguiente artículo:
En realidad, la aplicación anterior usa el comando mysqldump de MySQL.
También podremos usar MySQL Administrator, herramienta gratuita disponible en la web de MySQL. Una vez abierta y conectados a la base de datos MySQL, pulsaremos (a la izquierda) en "Backup", pulsaremos en "New Project" y seleccionaremos en "Schemata" el esquema del que haremos copia de seguridad, pasándolo a la derecha con el botón ">". En "Project Name" introduciremos el nombre del proyecto de copia de seguridad, por ejemplo "Copia_ajpdsoft". Si queremos guardar el proyecto pulsaremos "Save Project", si queremos ver más opciones pulsaremos "Advanced Options" y si queremos programarlo para que se ejecute de forma periódica pulsaremos en "Schedule". En nuestro caso lo ejecutaremos directamente pulsando en "Execute Backup Now" pues queremos migrar el sistema MySQL a PosgreSQL y no queremos volver a hacer copia de seguridad:
AjpdSoft Copia de seguridad de MySQL Server lógica (a fichero SQL)
Por supuesto, en el caso de hacer copia de seguridad para una migración a otro entorno, como es este caso, debemos asegurarnos de que ningún equipo cliente esté accediendo a la base de datos MySQL mientras hacemos la copia de seguridad. Pues si algún cliente accede y hace modificaciones no quedarán guardadas en el fichero de copia de seguridad y no serán migradas a PostgreSQL. Por lo que debemos asegurarnos de que la copia de seguridad para la migración definitiva se hace sin ningún usuario conectado.


Copia de seguridad física de MySQL (ficheros de la BD)

Es conveniente realizar también una copia de los ficheros físicos que conforman la base de datos MySQL. Si vamos a eliminar el servidor con MySQL para cambiarlo por uno con PostgreSQL es muy recomendable hacer copia también de los ficheros físicos de la base de datos, además de la copia lógica. La ubicación de estos ficheros puede consultarse en el fichero my.ini de configuración de MySQL, en el parámetro datadir.
Para hacer la copia de seguridad física de MySQL detendremos el servicio previamente:
AjpdSoft Copia de seguridad física de MySQL (ficheros de la BD)
Una vez detenido haremos un "copiar pegar", copiaremos los ficheros en un medio no volátil (CD, DVD, unidad de cinta, etc.) y lo guardaremos en lugar seguro. No es conveniente eliminar esta copia de seguridad, pues si se complica el proceso de migración a PostgreSQL siempre podremos volver a MySQL.


Realizar pruebas de las aplicaciones de nuestra empresa en la nueva BD PostgreSQL

Bien usando virtualización o mediante cualquier otro método, es muy recomendable montar un servidor PostgreSQL (en Windows o en Linux) y probar las aplicaciones de nuestra empresa que lo vayan a usar. Incluso aunque los desarrolladores nos aseguren que las aplicaciones son compatibles con PosgreSQL, antes de realizar el cambio de MySQL a PostgreSQL es conveniente testearlas en entornos de prueba (virtualizados o no).
Lo más sencillo y menos costoso es instalar algún software de virtualización como VMware, como indicamos aquí:
Una vez preparada la máquina virtual (con el sistema operativo elegido), instalaremos PostgreSQL, como indicamos aquí:
Para Windows:
Para Linux:
Cuando ya tengamos el entorno de pruebas deberemos cambiar las conexiones de nuestras aplicaciones (por el método indicado por los desarrolladores) para que "apunten" al servidor de PostgreSQL de prueba. Verificaremos que todo funciona correctamente.


Elección del sistema operativo para el servidor de PostgreSQL

Es muy importante tener claro el sistema operativo donde se instalará el motor de base de datos PostgreSQL y que convertiremos en servidor de PostgreSQL. No haremos una comparativa entre GNU Linux y Microsoft Windows para PostgreSQL en este manual porque no es el objetivo. Pero sí queremos dejar claro que es recomendable que hagáis las pruebas de rendimiento, estabilidad y disponibilidad o bien con máquinas virtuales o bien en entornos de prueba real. Tanto si se elige Microsoft Windows como si se elige GNU Linux lo importante es que previamente se hayan barajado los pros y los contras para la organización.
Para el caso de la elección del sistema operativo ocurre lo mismo que para el caso de la elección del motor de base de datos ¿Microsoft Windows vs GNU Linux? ¿MySQL vs PostgreSQL? en todos los casos existen ventajas e inconvenientes. Es cuestión de elegir el sistema operativo que mejor se adapte a las necesidades de la empresa.


Cambiar tipos de datos no coincidentes entre MySQL y PostgreSQL

Deberemos reemplazar los tipos de datos de MySQL no coincidentes con los de PostgreSQL por su correspondiente. Por ejemplo, el tipo de datos "int(10)" de MySQL es equivalente al tipo de datos "integer" de PostgreSQL.

 

Tipos de datos MySQL y PostgreSQL

En el siguiente artículo se pueden consultar los tipos de datos de MySQL:
En este otro artículo se pueden consultar los tipos de datos de PostgreSQL:
Siguiendo estos manuales, reemplazaremos en el fichero SQL resultante de la exportación de los datos y tablas de MySQL los tipos de datos de MySQL con sus correspondientes PostgreSQL.

Tabla de correspondencias entre algunos tipos de datos de MySQL y PostgreSQL

Indicamos algunos tipos de datos MySQL y su correspondiente PostgreSQL:
MySQL PostgreSQL
INT(10) INTEGER
TINYINT SMALLINT
MEDIUMINT INTEGER
BIGINT UNSIGNED NUMERIC(20)
DOUBLE DOUBLE PRECISION
FLOAT REAL
TINYTEXT TEXT
MEDIUMTEXT TEXT
LONGTEXT TEXT
BINARY(n) BYTEA
VARBINARY(n) BYTEA
TINYBLOB BYTEA
BLOB BYTEA
MEDIUMBLOB BYTEA
LONGBLOB BYTEA
DATETIME TIMESTAMP
AUTO_INCREMENT SERIAL (o usar secuencias para generar el autoincremento)


Campos autoincremento de MySQL, simular el auto_increment de MySQL en PostgreSQL con secuencias

En MySQL el "tipo de datos" autoincremento al uso no existe, MySQL permite generar autoincrementos añadiendo la cláusula "AUTO_INCREMENT" en la creación de una tabla, por ejemplo:

CREATE TABLE bdajpdsoft.departamento 
(
  codigo integer NOT NULL AUTO_INCREMENT,
  nombre varchar(150) NOT NULL,
  codigoubicacion integer 
)
En el caso de PostgreSQL, sí que incorpora un tipo de dato llamado "serial" que es autoincremental. Con lo cual, en nuestro fichero SQL exportado de MySQL, deberemos reemplazar las líneas:
nombre_campo integer AUTO_INCREMENT
Por:
nombre_campo serial
En realidad, al indicar el tipo de datos "serial", será el propio PostgreSQL el que cree una secuencia y la asigne al campo. Por ello PostgreSQL también permite simular los autoincrementos a partir de secuencias (al igual que Oracle). Si queremos usar secuencias en vez del tipo de datos "serial" (que al final será lo mismo), para cada auntoincremento (auto_increment) que tengamos en el SQL de MySQL tendremos que crear una secuencia y luego, en el SQL de creación de la tabla, en el campo que es autoincremento habrá que añadir: DEFAULT NEXTVAL('nombre_esquema.nombre_secuencia).
Será algo así, si tenemos este SQL de creación de una tabla en MySQL:


CREATE TABLE bdajpdsoft.departamento 
(
  codigo integer NOT NULL AUTO_INCREMENT,
  nombre varchar(150) NOT NULL,
  codigoubicacion integer 
)
La consulta quedará dividida en dos para el caso de PostgreSQL:
1. Crear la secuencia para el autoincremento del campo "codigo" con:
CREATE SEQUENCE departamento_codigo
INCREMENT BY 1
MINVALUE 1
START 1
;
2. Crear la tabla y en el campo "codigo" usar la secuencia anterior con:

CREATE TABLE bdajpdsoft.departamento
(
  codigo integer  NOT NULL DEFAULT NEXTVAL(bdajpdsoft.departamento_codigo),
  nombre varchar(100) NOT NULL,
  PRIMARY KEY (codigo) 
);
Donde: "bdajpdsoft" será el nombre del esquema que usemos en PostgreSQL y "departamento" será el nombre de la tabla.


Restricciones de clave (llave única), diferencias entre MySQL y PostgreSQL

Para el caso de la declaración de las restricciones de claves (claves únicas y claves primarias), MySQL, al exportar con mysqldump, quedarán así:
CREATE TABLE bdincidencias.categoria (
codigo integer NOT NULL,
nombre_campo_unico varchar(75) NOT NULL,
fechaalta datetime,
PRIMARY KEY (codigo),
UNIQUE KEY nombre_clave_unica (nombre) );
Para el caso de PostgreSQL, la clave primaria (PRIMARY KEY) se declarará igual que para MySQL, y para las claves únicas, se declararán así:
CREATE TABLE bdincidencias.categoria (
codigo integer NOT NULL,
nombre_campo_unico varchar(75) NOT NULL,
fechaalta datetime,
PRIMARY KEY (codigo),
UNIQUE (nombre_campo_unico) );
Otra forma de definirlas en PostgreSQL, fuera de la consulta SQL de creación, es:
1. Para la clave primaria:
ALTER TABLE ONLY nombre_tabla
ADD CONSTRAINT nombre_clave PRIMARY KEY (nombre_campo);
2. Para las claves únicas:
ALTER TABLE ONLY nombre_esquema.nombre_tabla
ADD CONSTRAINT nombre_clave UNIQUE (nombre_campo);

Tipo de motor de base de datos InnoDB y MyISAM

MySQL admite varios engines (InnoDB, MyISAM, CSV, Archive, Memory, Blackhole, etc.), dependiendo del que hayamos elegido para cada tabla, en el SQL resultante de la exportación con mysqldump, mostrará algo así en cada tabla:
ENGINE=InnoDB
ó
ENGINE=MyISAM
PostgreSQL no admite tipos de engine, por lo que deberemos eliminar estas declaraciones del fichero SQL resultante de la exportación de los datos de MySQL con mysqldump.

El sistema operativo de los servidores de MySQL y de PostgreSQL

En principio, el sistema operativo en el que estén ubicados los servidores de MySQL (origen de la migración) y de PosgreSQL (destino de la migración) es indiferente para el proceso de migración.
Lógicamente si utilizamos GNU Linux, Mac OS X ó Windows, los comandos, aplicaciones y ubicaciones de archivos variarán. Pero el procedimiento de exportación de MySQL a fichero SQL y de modificación (adaptación) del fichero SQL e importación a PostgreSQL será similiar en cualquiera de los sistemas operativos.
En el siguiente artículo explicamos cómo instalar y administrar PostgreSQL en Windows 7:
En este otro artículo instalamos PostgreSQL en Linux:


Probar y adaptar en caso necesario las aplicaciones que accederán a PostgreSQL

Una vez realizada la migración de MySQL a PostgreSQL deberemos asegurarnos de que las aplicaciones de nuestra empresa de facturación, contabilidad, recursos humanos, etc. que guardaban los datos en MySQL funcionan correctamente en PostgreSQL. Para ello deberemos saber el tipo de conexión que usan (ODBC, nativa, etc.) para adaptarla al nuevo motor de base de datos PostgreSQL.
Además, habrá que asegurarse de que las aplicaciones no usen funciones específicas de MySQL como por ejemplo DESCRIBRE table, SHOW DATABASES, SHOW TABLES, etc. que no existen en PostgreSQL. De ser así habrá que adaptarlas a PostgreSQL, contactando con los desarrolladores de las aplicaciones para que realicen las modificaciones pertinentes.
También habrá que tener en cuenta y verificar si las aplicaciones de nuestra empresa que usaban MySQL utilizan funciones de SQL propias de MySQL (cadena de texto, fecha y hora, etc.), que también habrá que adaptar a PostgreSQL.


Importación del fichero SQL en PostgreSQL resultante de la exportación de MySQL y la adaptación

Una vez que hayamos adaptado el fichero SQL resultante de la exportación de MySQL para que pueda ser ejecutado correctamente en PostgreSQL, como hemos indicando en pasos anteriores, lo revisaremos y lo importaremos a PostgreSQL, a continuación explicamos cómo realizar esta importación.
1. En primer lugar crearemos la conexión al servidor, la base de datos y el esquema como indicamos aquí:
2. En el caso de PostgreSQL en GNU Linux abriremos una ventana de terminal, iniciaremos sesión con el usuario postgres, para ello ejecutaremos el comando GNU Linux:

su postgres

Introduciremos la contraseña del usuario postgres (contraseña que configuramos en la instalación de PostgreSQL)
Para realizar la importación definitiva de MySQL a PostgreSQL, ejecutaremos el siguiente comando indicando el archivo de script sql:

psql -U postgres -f /home/ajpdsoft/copia_mysql.sql
Por supuesto, una vez ejecutado el comando para la importación deberemos revisar que los datos se han importado correctamente.



Anexo

Ejemplo de script de SQL generado con PostgreSQL Dump


--
-- PostgreSQL database dump
--

-- Started on 2010-11-08 21:49:17 CET

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1789 (class 1262 OID 16384)
-- Name: bdajpdsoft; Type: DATABASE; Schema: -; Owner: postgres
--

CREATE DATABASE bdajpdsoft WITH TEMPLATE = template0 
ENCODING = 'UTF8' LC_COLLATE = 'es_ES.utf8' LC_CTYPE = 'es_ES.utf8';


ALTER DATABASE bdajpdsoft OWNER TO postgres;

\connect bdajpdsoft

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 6 (class 2615 OID 16385)
-- Name: esajpdsoft; Type: SCHEMA; Schema: -; Owner: postgres
--

CREATE SCHEMA esajpdsoft;


ALTER SCHEMA esajpdsoft OWNER TO postgres;

SET search_path = esajpdsoft, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- TOC entry 1497 (class 1259 OID 16388)
-- Dependencies: 6
-- Name: factura; Type: TABLE; Schema: esajpdsoft; Owner: postgres; Tablespace: 
--

CREATE TABLE factura (
    codigo integer NOT NULL,
    fecha date,
    importe money,
    codigocliente integer,
    numero character varying(20) NOT NULL,
    num_fac integer
);


ALTER TABLE esajpdsoft.factura OWNER TO postgres;

--
-- TOC entry 1496 (class 1259 OID 16386)
-- Dependencies: 1497 6
-- Name: factura_codigo_seq; Type: SEQUENCE; Schema: esajpdsoft; Owner: postgres
--

CREATE SEQUENCE factura_codigo_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;


ALTER TABLE esajpdsoft.factura_codigo_seq OWNER TO postgres;

--
-- TOC entry 1792 (class 0 OID 0)
-- Dependencies: 1496
-- Name: factura_codigo_seq; Type: SEQUENCE OWNED BY; Schema: esajpdsoft; Owner: postgres
--

ALTER SEQUENCE factura_codigo_seq OWNED BY factura.codigo;


--
-- TOC entry 1793 (class 0 OID 0)
-- Dependencies: 1496
-- Name: factura_codigo_seq; Type: SEQUENCE SET; Schema: esajpdsoft; Owner: postgres
--

SELECT pg_catalog.setval('factura_codigo_seq', 4, true);


--
-- TOC entry 1498 (class 1259 OID 16396)
-- Dependencies: 6
-- Name: nota; Type: TABLE; Schema: esajpdsoft; Owner: postgres; Tablespace: 
--

CREATE TABLE nota (
    codigo integer NOT NULL,
    nota text
);


ALTER TABLE esajpdsoft.nota OWNER TO postgres;

--
-- TOC entry 1499 (class 1259 OID 16399)
-- Dependencies: 1498 6
-- Name: nota_codigo_seq; Type: SEQUENCE; Schema: esajpdsoft; Owner: postgres
--

CREATE SEQUENCE nota_codigo_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;


ALTER TABLE esajpdsoft.nota_codigo_seq OWNER TO postgres;

--
-- TOC entry 1794 (class 0 OID 0)
-- Dependencies: 1499
-- Name: nota_codigo_seq; Type: SEQUENCE OWNED BY; Schema: esajpdsoft; Owner: postgres
--

ALTER SEQUENCE nota_codigo_seq OWNED BY nota.codigo;


--
-- TOC entry 1795 (class 0 OID 0)
-- Dependencies: 1499
-- Name: nota_codigo_seq; Type: SEQUENCE SET; Schema: esajpdsoft; Owner: postgres
--

SELECT pg_catalog.setval('nota_codigo_seq', 1, true);


--
-- TOC entry 1777 (class 2604 OID 16391)
-- Dependencies: 1496 1497 1497
-- Name: codigo; Type: DEFAULT; Schema: esajpdsoft; Owner: postgres
--

ALTER TABLE factura ALTER COLUMN codigo SET DEFAULT nextval('factura_codigo_seq'::regclass);


--
-- TOC entry 1778 (class 2604 OID 16401)
-- Dependencies: 1499 1498
-- Name: codigo; Type: DEFAULT; Schema: esajpdsoft; Owner: postgres
--

ALTER TABLE nota ALTER COLUMN codigo SET DEFAULT nextval('nota_codigo_seq'::regclass);


--
-- TOC entry 1785 (class 0 OID 16388)
-- Dependencies: 1497
-- Data for Name: factura; Type: TABLE DATA; Schema: esajpdsoft; Owner: postgres
--

COPY factura (codigo, fecha, importe, codigocliente, numero, num_fac) FROM stdin;
3 2010-01-01 €120,00 1 0001/2010 \N
4 2010-11-08 €154.525,00 2 0002/2010 \N
\.


--
-- TOC entry 1786 (class 0 OID 16396)
-- Dependencies: 1498
-- Data for Name: nota; Type: TABLE DATA; Schema: esajpdsoft; Owner: postgres
--

COPY nota (codigo, nota) FROM stdin;
1 Prueba de tipo de datos Text para importación
\.


--
-- TOC entry 1780 (class 2606 OID 16395)
-- Dependencies: 1497 1497
-- Name: factura_numero_key; Type: CONSTRAINT; Schema: esajpdsoft; Owner: postgres; Tablespace: 
--

ALTER TABLE ONLY factura
    ADD CONSTRAINT factura_numero_key UNIQUE (numero);


--
-- TOC entry 1782 (class 2606 OID 16393)
-- Dependencies: 1497 1497
-- Name: factura_pkey; Type: CONSTRAINT; Schema: esajpdsoft; Owner: postgres; Tablespace: 
--

ALTER TABLE ONLY factura
    ADD CONSTRAINT factura_pkey PRIMARY KEY (codigo);


--
-- TOC entry 1784 (class 2606 OID 16409)
-- Dependencies: 1498 1498
-- Name: nota_pkey; Type: CONSTRAINT; Schema: esajpdsoft; Owner: postgres; Tablespace: 
--

ALTER TABLE ONLY nota
    ADD CONSTRAINT nota_pkey PRIMARY KEY (codigo);


--
-- TOC entry 1791 (class 0 OID 0)
-- Dependencies: 3
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


-- Completed on 2010-11-08 21:49:17 CET

--
-- PostgreSQL database dump complete
--

Ejemplo de script de SQL generado con MySQL Dump


-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version 5.1.42-community


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


--
-- Create schema gestionagricola
--

CREATE DATABASE IF NOT EXISTS gestionagricola;
USE gestionagricola;

--
-- Definition of table `caja`
--

DROP TABLE IF EXISTS `caja`;
CREATE TABLE `caja` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fecha` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `importe` float NOT NULL DEFAULT '0',
  `saldo` float NOT NULL DEFAULT '0',
  `concepto` varchar(200) NOT NULL DEFAULT '',
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  `codigotecnico` int(10) unsigned DEFAULT NULL,
  `tipo` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `caja`
--

/*!40000 ALTER TABLE `caja` DISABLE KEYS */;
/*!40000 ALTER TABLE `caja` ENABLE KEYS */;


--
-- Definition of table `chequepagare`
--

DROP TABLE IF EXISTS `chequepagare`;
CREATE TABLE `chequepagare` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fechavencimiento` datetime DEFAULT NULL,
  `codigotercero` int(10) unsigned NOT NULL DEFAULT '0',
  `importe` float DEFAULT NULL,
  `banco` varchar(100) DEFAULT NULL,
  `tipo` varchar(10) NOT NULL DEFAULT '',
  `iban` varchar(30) DEFAULT NULL,
  `ccc` varchar(20) DEFAULT NULL,
  `serie` char(2) DEFAULT NULL,
  `numero` varchar(15) DEFAULT NULL,
  `numero2` varchar(15) DEFAULT NULL,
  `fechaalta` datetime DEFAULT NULL,
  `observacion` varchar(255) DEFAULT NULL,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `chequepagare`
--

/*!40000 ALTER TABLE `chequepagare` DISABLE KEYS */;
/*!40000 ALTER TABLE `chequepagare` ENABLE KEYS */;


--
-- Definition of table `cita`
--

DROP TABLE IF EXISTS `cita`;
CREATE TABLE `cita` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `asunto` varchar(150) NOT NULL DEFAULT '',
  `ubicacion` varchar(150) DEFAULT NULL,
  `comienzo` datetime DEFAULT NULL,
  `fin` datetime DEFAULT NULL,
  `descripcion` text,
  `codigocategoria` int(10) unsigned DEFAULT NULL,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cita`
--

/*!40000 ALTER TABLE `cita` DISABLE KEYS */;
/*!40000 ALTER TABLE `cita` ENABLE KEYS */;


--
-- Definition of table `cobro`
--

DROP TABLE IF EXISTS `cobro`;
CREATE TABLE `cobro` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fecha` datetime DEFAULT NULL,
  `importe` float DEFAULT NULL,
  `codigocliente` int(10) unsigned DEFAULT NULL,
  `descripcion` varchar(255) DEFAULT NULL,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  `fichero` longblob,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `cobro`
--

/*!40000 ALTER TABLE `cobro` DISABLE KEYS */;
/*!40000 ALTER TABLE `cobro` ENABLE KEYS */;


--
-- Definition of table `contacto`
--

DROP TABLE IF EXISTS `contacto`;
CREATE TABLE `contacto` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL DEFAULT '',
  `telefonoparticular1` varchar(20) DEFAULT NULL,
  `telefonoparticular2` varchar(20) DEFAULT NULL,
  `telefonoparticular3` varchar(20) DEFAULT NULL,
  `telefonoparticular4` varchar(20) DEFAULT NULL,
  `movilempresa1` varchar(20) DEFAULT NULL,
  `movilempresa2` varchar(20) DEFAULT NULL,
  `movilempresa3` varchar(20) DEFAULT NULL,
  `movilempresa4` varchar(20) DEFAULT NULL,
  `emailparticular1` varchar(150) DEFAULT NULL,
  `emailempresa1` varchar(150) DEFAULT NULL,
  `emailparticular2` varchar(150) DEFAULT NULL,
  `emailparticular3` varchar(150) DEFAULT NULL,
  `emailparticular4` varchar(150) DEFAULT NULL,
  `direccionparticular` varchar(250) DEFAULT NULL,
  `direccionempresa` varchar(250) DEFAULT NULL,
  `horariotrabajo` varchar(150) DEFAULT NULL,
  `empresa` varchar(100) DEFAULT NULL,
  `webparticular` varchar(250) DEFAULT NULL,
  `webempresa` varchar(250) DEFAULT NULL,
  `observacion` varchar(255) DEFAULT NULL,
  `fechaalta` datetime DEFAULT NULL,
  `ubicacion` varchar(40) DEFAULT NULL,
  `extension1` varchar(20) DEFAULT NULL,
  `extension2` varchar(20) DEFAULT NULL,
  `telefonoempresa1` varchar(20) DEFAULT NULL,
  `telefonoempresa2` varchar(20) DEFAULT NULL,
  `telefonoempresa3` varchar(20) DEFAULT NULL,
  `telefonoempresa4` varchar(20) DEFAULT NULL,
  `movilparticular1` varchar(20) DEFAULT NULL,
  `movilparticular2` varchar(20) DEFAULT NULL,
  `movilparticular3` varchar(20) DEFAULT NULL,
  `movilparticular4` varchar(20) DEFAULT NULL,
  `fax1` varchar(20) DEFAULT NULL,
  `fax2` varchar(20) DEFAULT NULL,
  `emailempresa2` varchar(150) DEFAULT NULL,
  `emailempresa3` varchar(150) DEFAULT NULL,
  `emailempresa4` varchar(150) DEFAULT NULL,
  `codigotercero` int(10) unsigned DEFAULT NULL,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `contacto`
--

/*!40000 ALTER TABLE `contacto` DISABLE KEYS */;
/*!40000 ALTER TABLE `contacto` ENABLE KEYS */;


--
-- Definition of table `documento`
--

DROP TABLE IF EXISTS `documento`;
CREATE TABLE `documento` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `documento` longblob,
  `fechaalta` datetime DEFAULT NULL,
  `version` varchar(40) DEFAULT NULL,
  `nombre` varchar(150) DEFAULT NULL,
  `ruta` varchar(255) DEFAULT NULL,
  `caracteristicas` text,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  `codigoregistro` int(10) unsigned DEFAULT NULL,
  `ventana` varchar(50) DEFAULT NULL,
  `guardarbd` char(1) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `documento`
--

/*!40000 ALTER TABLE `documento` DISABLE KEYS */;
/*!40000 ALTER TABLE `documento` ENABLE KEYS */;


--
-- Definition of table `formapago`
--

DROP TABLE IF EXISTS `formapago`;
CREATE TABLE `formapago` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL DEFAULT '',
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  `dias` int(10) unsigned DEFAULT NULL,
  `descripcion` varchar(250) DEFAULT NULL,
  PRIMARY KEY (`codigo`),
  UNIQUE KEY `formapago_nombre` (`nombre`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `formapago`
--

/*!40000 ALTER TABLE `formapago` DISABLE KEYS */;
INSERT INTO `formapago` (`codigo`,`nombre`,`codusuarioa`,
  `codusuariom`,`fechaa`,`fecham`,`dias`,`descripcion`) VALUES 
 (1,'Contado',1,NULL,'2008-01-25 17:41:30',NULL,0,'Contado'),
 (2,'15 días',1,1,'2008-01-25 17:41:40','2008-01-25 17:42:04',15,'Quince días'),
 (3,'60 días',1,NULL,'2008-01-25 17:41:52',NULL,60,'60 días');
/*!40000 ALTER TABLE `formapago` ENABLE KEYS */;


-
-- Definition of table `incidencia`
--

DROP TABLE IF EXISTS `incidencia`;
CREATE TABLE `incidencia` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fecha` datetime DEFAULT NULL,
  `codigocliente` int(10) unsigned DEFAULT NULL,
  `importecoste` float DEFAULT NULL,
  `importecliente` float DEFAULT NULL,
  `asunto` varchar(255) DEFAULT NULL,
  `incidencia` text,
  `incidenciaresolucion` text,
  `fecharesolucion` datetime DEFAULT NULL,
  `estado` varchar(30) DEFAULT NULL,
  `tipo` varchar(30) DEFAULT NULL,
  `codigotecnico` int(10) unsigned DEFAULT NULL,
  `prioridad` varchar(10) DEFAULT NULL,
  `contacto` varchar(100) DEFAULT NULL,
  `completado` int(10) unsigned DEFAULT NULL,
  `fechavencimiento` datetime DEFAULT NULL,
  `codigorecurso` int(10) unsigned DEFAULT NULL,
  `codigocontacto` int(10) unsigned DEFAULT NULL,
  `codusuarioa` int(10) unsigned DEFAULT NULL,
  `codusuariom` int(10) unsigned DEFAULT NULL,
  `fechaa` datetime DEFAULT NULL,
  `fecham` datetime DEFAULT NULL,
  `aceptada` char(1) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Definition of table `parametro`
--

DROP TABLE IF EXISTS `parametro`;
CREATE TABLE `parametro` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) DEFAULT NULL,
  `valor` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `parametro`
--

/*!40000 ALTER TABLE `parametro` DISABLE KEYS */;
INSERT INTO `parametro` (`codigo`,`nombre`,`valor`) VALUES 
 (1,'version','1.0.1.50 (25-01-2008)');
/*!40000 ALTER TABLE `parametro` ENABLE KEYS */;


--
-- Definition of table `parcela`
--

DROP TABLE IF EXISTS `parcela`;
CREATE TABLE `parcela` (
  `codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL DEFAULT '',
  `lugar` varchar(100) DEFAULT NULL,
  `superficie` float DEFAULT NULL,
  `numeropies` float DEFAULT NULL,
  `poligono` varchar(45) DEFAULT NULL,
  `parcela` varchar(45) DEFAULT NULL,
  `fechaalta` datetime DEFAULT NULL,
  `codigovariedad` int(10) unsigned DEFAULT NULL,
  `fechaplantacion` datetime DEFAULT NULL,
  `goterospie` float DEFAULT NULL,
  `litroshoragotero` float DEFAULT NULL,
  `observacion` text,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `parcela`
--

/*!40000 ALTER TABLE `parcela` DISABLE KEYS */;
/*!40000 ALTER TABLE `parcela` ENABLE KEYS */;


/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.