Carlos,
> Anduve leyendo en las contribuciones de Harbour y por otros foros y
> encontré esta documentación y acceso y wrapers a Postgres
>
>
http://www.vouch.info/harbour/index.html?hbpgsql.htm
>
> En teoría TPQServer() sirve para conectarse a un servidor Postgres.
> También hay ejemplos en la carpeta de contribuciones.
> Están los fuentes a nivel de C.
> Están las clases TPostgres.
>
> Espero sirva de algo para contar con driver nativo y no tener que
> crear conexiones ODBC en cada PC cliente.
>
> Si puedo colaborar en algo más con todo gusto.
El problema no es la conexión con psql. Nosotros ya teníamos un
datasource en funcionamiento desde 2009. El problema es que en psql no
es nada fácil obtener los metadatos necesarios para hacer funcionar los
datasets. Vamos, no es que no existan esos metadatos, sino que son
muchos y demasiado ambiguos, de modo que no existe una forma segura de
obtenerlos en todos los casos y que permitan, p.ej., identificar
inequívocamente una fila.
Para te te hagas una idea... en SQLite, existe una columna "virtual" en
todas las tablas llamada _RowId_, que nos permite identificar una fila
sin ningún tipo de error. Xailer utiliza esta información para poder
hacer UPDATEs en las tablas con total seguridad, sin afectar a múltiples
filas. En el caso de MySQL, no existe esa columna, pero sí es
relativamente fácil obtener la clave primaria de una tabla. Xailer
comprueba si en el query está contenida toda la clave primaria, y si es
así, entonces utiliza esa información para hacer los UPDATEs. Si la
clave primaria no está completa, entonces es imposible hacer UPDATEs de
forma segura, y por eso Xailer abre el query en modo solo-lectura.
Pero en el caso de PostgreSQL, esa información no está disponible de
forma clara, y lo más importante, no de forma 100% segura. Para obtener
la información que necesitamos, es necesario consultar varias tablas de
sistema, y siempre queda la posibilidad de no haber obtenido toda la
información relevante y poner en riesgo las operaciones de escritura en
la BD (UPDATEs, DELETEs, etc.). Esa fue la razón de que lo
abandonáramos, y te puedo asegurar que le dedicamos muchísimas horas de
trabajo, y no fue una decisión fácil. Bueno, la verdad es que en cuanto
llegamos a la conclusión de que no era 100% seguro, sí fue muy fácil
abandonarlo, porque por encima de las horas de trabajo está la seguridad
y fiabilidad de la herramienta.
En resumen, PostgreSQL se puede utilizar perfectamente como motor SQL,
escribiendo cada uno las sentencias SQL que necesite, a sabiendas de que
conoce prefectamente la estructura de la BD y sabe lo que tiene que
hacer. Pero los datasets son algo genérico. Tienen que funcionar sin
conocer de antemano la estructura de la BD, y necesitan obtener esa
información para poder hacer las operaciones de escritura de forma
segura. Si conoces una forma de obtener esa información y que sea 100%
segura, entonces no habría ningún problema en continuarlo.
No obstante, y como nota personal, considero que con la publicación de
una "librería de acceso cliente" para MariaDB, que además es compatible
con MySQL, y con licencia LGPL, ha cambiado mucho el panorama de las
BB.DD. para uso comercial. Antes, cuando la librería de acceso a MySQL
era GPL, quedaban pocas opciones: comprar una licencia de uso comercial
de MySQL a Oracle, usar PostgreSQL o usar FireBird (SQLite no cuenta
porque es un motor local). Pero ahora, se puede usar la librería de
acceso de MariaDB de forma totalmente gratuita desde un programa
comercial, y además atacando un servidor MariaDB o MySQL
indistintamente. Esto mismo ha hecho que en Xailer nos estemos
replanteando incluso hacer un datasource para FireBird.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info