Exportar datos de firebird

Con esta entrada inauguro la categoría Herramientas Firebirdde este blog.

Durante el curso de vida de una aplicación, en mas de una oportunidad te ves en la necesidad de importar/exportar datos. Algunas bases de datos comerciales, entre las que destaca oracle cuentan con elaboradas y poderosas herramientas para realizar estas tareas. Firebird es un motor de base de datos mas crudo, en el sentido que el proyecto de base de datos se encarga solamente del motor y los utilitarios mas básicos para hacer copias de seguridad y mantenimiento de la misma. Eso puede llegar a decepcionar a aquellos que están acostumbrados a soluciones comerciales y desean invertir un mínimo de tiempo en este tipo de tareas: ¡quien no lo quisiera!.
Sin embargo, a medida que pasa el tiempo y mas gente se decide a apoyar o soportar de alguna manera a firebird, van apareciendo y se van conociendo utilitarios de todo tipo, tanto en el ámbito comercial como en el libre, o al menos de código abierto.

FBExport es una de estas herramientas, que no pertenece a la categoría de las nuevas, pero si de las que merecen mas difusión. Lo que FBExport hace, es ayudarte a exportar e importar datos desde y hacia bases de datos firebird con un esfuerzo mínimo, sobre Windows o Linux. La exportación puede llevarse a cabo en formato CSV, como un script de sentencias insert o en un formato binario creado por el autor del utilitario, Milan Babuskov. FBExport es una herramienta de línea de comandos, mis preferidas, pues pueden integrarse fácilmente en soluciones mas elaboradas, bien sea a través de scripts del interprete de comandos o ejecutándolas desde otros aplicativos.

Hoy examinaremos la exportación de información y dejaremos la importación para una próxima entrega.

los parámetros de conexión:

  • -H Host (si se omite, se asume localhost)
  • -D Database (puede usarse una ruta o un alias
  • -U UserName (si se omite, se asume SYSDBA)
  • -P Password
  • -O Rol
  • -A «Charset» Nombre del juego de caracteres con el que se realizará la conexión.

Los datos a exportar

Podemos exportar cualquier conjunto de datos con el parámetro -Q, seguido de una sentencia select válida, entre comillas dobles para que el interprete de comandos lo pase como un solo parámetro. También podemos exportar una tabla completa usando el parámetro -V, y en ese caso podríamos añadir al parámetro -Q solamente la sentencia where, si hiciera falta.

El formato de la exportación y de los datos

  • -S exporta en formato binario de fbexport
  • -Si exporta script SQL de sentencias INSERT
  • -Sc exporta CSV (texto separado por comas)
  • -B el separador que se usará en el CSV, si se omite, se asume la coma (,) y acepta el valor especial TAB
  • -J formato de fechas, si se omite se usa «D.M.Y»
  • -K formato de horas, si se omite se usa «H:M:S»

El destino

Se indica con el parámetro -F seguido de un nombre de archivo válido, o de el signo menos (), que genera la salida en el stdout. Si el archivo indicado ya existe, lo sobreescribe sin preguntar.

El funcionamiento

Tan sencillo como armar la llamada con los parámetros adecuados, y ¡Listo!. El tiempo de corrida es mas que aceptable. Acá una muestra de los resultados generando los tres tipos de salida:

C:\fbx\windows>fbexport -S -D pruebas -P masterkey \
-Q "select * from cict_cliente" -F clientes.dat
Checking database charset...NONE.
Connecting to: 'LOCALHOST' as 'SYSDBA'...Connected.
Creating and starting transaction...Done.
Create statement...Done.
Prepare statement...Done.
Exec statement...Done.
Exporting data...
Checkpoint at: 1000 lines.
Checkpoint at: 2000 lines.
Checkpoint at: 3000 lines.
Checkpoint at: 4000 lines.

Start   : Fri Feb 08 21:46:36 2008
End     : Fri Feb 08 21:46:37 2008
Elapsed : 1 seconds.
4450 rows exported to clientes.dat.

Transaction commited.

C:\fbx\windows>fbexport -Sc -D pruebas -P masterkey \
-Q "select * from cict_cliente" -F clientes.csv
Checking database charset...NONE.
Connecting to: 'LOCALHOST' as 'SYSDBA'...Connected.
Creating and starting transaction...Done.
Create statement...Done.
Prepare statement...Done.
Exec statement...Done.
Exporting data in CSV format...
Checkpoint at: 1000 lines.
Checkpoint at: 2000 lines.
Checkpoint at: 3000 lines.
Checkpoint at: 4000 lines.

Start   : Fri Feb 08 21:46:47 2008
End     : Fri Feb 08 21:46:48 2008
Elapsed : 1 seconds.
4450 rows exported to clientes.csv.

Transaction commited.

C:\fbx\windows>fbexport -Si -D pruebas -P masterkey \
-Q "select * from cict_cliente" -F clientes.sql
Checking database charset...NONE.
Connecting to: 'LOCALHOST' as 'SYSDBA'...Connected.
Creating and starting transaction...Done.
Create statement...Done.
Prepare statement...Done.
Exec statement...Done.
Exporting data as INSERT statements...
Checkpoint at: 1000 lines.
Checkpoint at: 2000 lines.
Checkpoint at: 3000 lines.
Checkpoint at: 4000 lines.

Start   : Fri Feb 08 21:46:54 2008
End     : Fri Feb 08 21:46:55 2008
Elapsed : 1 seconds.
4450 rows exported to clientes.sql.

Transaction commited.

Me propongo para la siguiente entrega de esta categoría diseñar una aplicación gráfica basada en FBExport y hecha en Delphi, para que aquellos que no disfrutan tanto de la línea de comandos no se pierdan de la oportunidad de usarla.

Autor: jachguate

Entrepreneur, traveler and IT enthusiast passionate about Delphi, databases and networks.

13 opiniones en “Exportar datos de firebird”

    1. Esta rara tu aplicación, lo único que logré hacer con ella fue conectarme a la base de datos y que me mostrara las tablas, procedimientos y funciones almacedas, estructuras de las tablas, tipos de datos y registros y solo eso; sobre la migración no logre hacerla funcionar y es lo que ando buscando migrar de Firebird a MySQL y hasta el momento solo he conseguido extraer la información de la BD pero no la migración de la misma.

    1. @Enrique, bienvenido. Es cierto que se echan de menos algunas… bueno, muchas!!… aún así es un producto interesantísimo!!!!

  1. Está excelente, sólo tengo una duda ¿Se puede recuperar desde Delphi la cantidad de registros exportados por cada tabla? u ¿Obtener el peso del archivo SQL exportado? ya que mi aplicación exporta tablas relativamente grandes de unos 50Mb o más.

    Estoy ocupando el siguiente procedimiento, para invocarlo desde Delphi:

    procedure TIBExportData.Exporta;
    Var
    Ejecutable, Comando: String;

    StartInfo: Startupinfo;
    ProcessInfo: Process_Information;
    dwExitCode: dWord;
    begin
    Ejecutable := ExtractFileDir(Application.ExeName) + ‘\fbexport ‘;

    ZeroMemory(@StartInfo, SizeOf(Startupinfo));
    with StartInfo do begin
    cb := SizeOf(Startupinfo);
    dwFlags := StartF_UseShowWindow;
    wShowWindow := sw_hide;
    End;

    Comando := Ejecutable + Formato + ‘ ‘ + Parametros + ‘ ‘ + Datos + ‘ ‘ +
    Destino;

    Log(Comando);
    Win32Check(CreateProcess(nil, Pchar(Comando), nil, nil, False,
    create_new_console, nil, nil, StartInfo, ProcessInfo));

    WaitForSingleObject(ProcessInfo.hProcess, Infinite);
    GetExitCodeProcess(ProcessInfo.hProcess, dwExitCode);
    if dwExitCode 0 then
    ShowMessageFmt(‘Salida: %d’, [dwExitCode]);
    end;

    Saludos.

  2. hola!. Tengo datos exportados desde una tabla Firebird. Un campo es hora… es un entero (9843203)… no puedo darle el formato adecuado (tipo HH:MM). El dato ya esta exportado, no puedo exportarlo nuevamente. Alguna sugerencia? Gracias!!

Deja un comentario