[pgsql-ayuda] CONCLUSIONES SOBRE LARGE OBJETS Y ODBC

From: "ASISTENCIA Y SOLUCIONES INFORMATICAS 24H S(dot)L(dot)" <ASI24H(at)jet(dot)es>
To: "pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx" <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: [pgsql-ayuda] CONCLUSIONES SOBRE LARGE OBJETS Y ODBC
Date: 1999-04-16 07:24:43
Message-ID: 3716E5BB.5F92D5E2@jet.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ante todo, avisar que como siempre, estos pasos y configuraciones me han
funcionado a mi tras muchas intentonas, y que a alguno puede que no le
funcionen. Agradecere cualquier critica constructiva, o informacion
adicional, ya que me estoy haciendo un apasionado del tema.

Lecturas recomendadas:
Recomiendo la lectura del manual del usuario de postgres, que podeis
bajar de cualquiera de los mirrors. Tambien recomiendo la lectura del
documento psqlodbc_confighelp.html y psqlodbc_faq.html de la web de
insigh. Todas las pruebas realizadas han sido con la version 6.0.0.0.5
del driver odbc para win9X y winNT.

Creación de un larje objet en el servidor:
Hay varias maneras de crear objetos Large Objet en nuestra base de
datos. La primera es un poco limitada, y no nos dara la flexibilidad
necesaria ( o yo no la he encontrado ) para utilizarla con el driver
ODBC. La segunda mas flexible si que lo hara.

Primer metodo:

Creamos el tipo bigobj:

CREATE TYPE bigobj (INPUT= lo_filein, OUTPUT = lo_fileout,
INTERNALLENGTH= variable);

CREATE TABLE biog_objs (id int4, obj bigobj);

a partir de ahi, para insertar los objetos, usaremos las dos funciones
sql lo_import y/o lo_export. Cualquier otro tipo de funcion, tendremos
que realizarlo atraves de las libpq.
No pongo ejemplo, por que perdi el papel con los apuntes ( Sorry por si
le interesaba a alguien esta opcion ). Esta opcion la he encontrado
abstante limitada, ya que no dejaba acceder via ODBC a la variable
bigobj ( no correctamente ).

Segundo metodo:
Este ya fue mas complicado. Probablemente tengais que hacer numerosas
intentonas ( o talvez no ) configurando el driver ODBC, a mi me costo
bastante.

Creamos el tipo lo:

CREATE TYPE lo ( internallength=4, externallength=10, input=int4in,
output=int4out, default='', passedbyvalue);

Nota: IMPORTATE CREAR EL TIPO DE DATOS COMO lo Y NO CON OTRO NOMBRE, O
EL DRIVER ODBC NO LO RECONOCERA. Los caracteres tras default son dos
comillas simples, no una doble.

Creamos la tabla de datos:

CREATE TABLE imagenes ( id integer, name varchar(30), imagen lo);

Nota: Si al acceder mediante el driver ODBC a la tabla os diese un error
del tipo error indexed o similar ( con ACCESS97 probar a crear la tabla
de la siguiente forma: CREATE TABLE imagenes ( id integer primary key ,
name varchar(30), imagen lo); Dara un error, pero funcionara despues (
Que es lo importante ).

Configuracion del driver ODBC:

Mi configuracion es la siguiente. Probablemente se podra afinar mas,
pero yo ya no me atrevo a moverla ;-).

En el control DRIVER:
Del primer bloque tengo activadas: KSQO, Recognize Unique Indexes y Use
Declare/Fetch.

Del bloque Unknown Sizes: Maximum.

Del bloque Data Type Options: Unknows as LongVarChar.

Y el resto por defecto.

En el control DATASOURCE:

Activadas: Show System Tables, Protocol 6.4 y en OID:Show Column.

Con esto a mi me funciona.

Para comprobarlo, ejecutar MS-ACCESS97, acceder a la base de datos
remota, vincular la tabla imagenes, y si no da errores y te deja
almacenar objetos OLE, es que lo has logrado.

Si no te funciona, prueba a cambiar la configuracion del driver ODBC, o
a crear la tabla imagenes de la otra forma indicada anteriormente.

Notas:

Postgresql no incluye todabia un tipo de datos LargeObjet, con lo que
hay que recurrir a estos truquitos, pero esto tiene unas pegas ( Que no
alcanzo a entender ). La faq del driver odbc, indica que cuando
destruimos un registro de la table, el objeto Large Objet almacenado no
se elimina, con lo que deja espacio residual dentro. Creo que en alguna
futura version nueva de postgres esto estara arreglado, no lo se.

Todo lo anterior es una orientacion, no soy programador ni ingeniero ni
nada por el estilo, solo un cabezota que intenta hacer un par de
cosicas. Cualquier ayuda extra, o sugerencia o apunte o critica
constructiva, sera muy agradecida.

Agradecimientos:

A toda la gente que desarrolla Linux, software para Linux o a los
usuarios que se molestan un poco en ayudar a los demas.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Bou Riquer 1999-04-16 22:19:10 [pgsql-ayuda] Ayuda para convertir tablas mysql a pg
Previous Message Lucas Di Pentima 1999-04-16 02:22:50