PostgreSQL Client
- Bibliotecas
- Romeu Bertho
- Versión: 1.0
- Activaciones: 5
Un cliente PostgreSQL completo implementado en MQL5 puro sobre sockets TCP nativos de MetaTrader 5.
La librería implementa el cliente PostgreSQL con autenticación MD5 y SCRAM-SHA-256, SSL/TLS, el Simple Query Protocol, y transacciones explícitas.
Sin DLLs, sin dependencias externas, sin servicios de terceros.
Características
Conexión TCP directa a cualquier base de datos compatible con PostgreSQL
Autenticación MD5 y SCRAM-SHA-256, autodetectada
SSL/TLS a través del flujo SSLRequest de PostgreSQL
Soporte completo de transacciones
Accesores de resultado tipificados con detección NULL
A salvo de mal manejo - nunca bloquea su EA
Compatibilidad
Diseñado para PostgreSQL > 7.4 a 18
RDS PostgreSQLAmazon Aurora PostgreSQL
Supabase (en la nube y autoalojado)
CockroachDB
CrateDB
YugabyteDB
Google Cloud SQL para PostgreSQL
Azure Database para PostgreSQL
Primeros pasos
Pase useSSL = true a Pg_Connect . La librería realiza la negociación estándar PostgreSQL SSLRequest y actualiza a TLS vía SocketTlsHandshake . Si el servidor rechaza la petición el cliente registra una advertencia y continúa sin cifrar.
Ejecuta cualquier sentencia SQL - INSERT , UPDATE , DELETE , DDL - a través de una única llamada a Pg_Query . Cada llamada devuelve un manejador de resultado cuyo ciclo de vida es gestionado por el cliente: el resultado anterior en el mismo cliente se libera automáticamente cuando se ejecuta la siguiente consulta.
Pg_Begin , Pg_Commit , y Pg_Rollback proporcionan envolturas de una llamada alrededor de los comandos de transacción SQL estándar. Para la recuperación de errores anidados, utilice puntos de guardado ( SAVEPOINT nombre / ROLLBACK TO nombre ) a través de Pg_Query .
Funciones cliente| Función | Descripción |
|---|---|
| Pg_Version() | Devuelve la cadena de versión de la librería. |
| Pg_Create() | Asigna un nuevo manejador de cliente. Devuelve 0 en caso de fallo. |
| Pg_Destroy(h) | Libera el manejador del cliente y su resultado actual. |
| Pg_Connect(h, host, port, db, user, pass, ssl, app) | Conecta y autentica contra el servidor. |
| Pg_Disconnect(h) | Envía un mensaje Terminate y cierra el socket limpiamente. |
| Pg_IsConnected(h) | True sólo cuando la conexión está en estado READY. |
| Pg_IsAlive(h) | Verdadero si el socket está abierto y el protocolo está al menos LISTO. |
| Pg_Ping(h) | Ejecuta SELECT 1 para verificar que la conexión está en buen estado. |
| Pg_Query(h, sql) | Ejecuta cualquier sentencia SQL y devuelve un manejador de resultado. |
| Pg_Begin(h) | Inicia una transacción y devuelve un manejador de resultado. |
| Pg_Commit(h) | Compromete la transacción actual. |
| Pg_Rollback(h) | Retrocede la transacción actual. |
| Pg_LastError(h) | Devuelve el último mensaje de error a nivel de protocolo o socket. |
| Función | Descripción |
|---|---|
| Res_IsOk(r) | Verdadero si la consulta se ha realizado correctamente. |
| Res_HasRows(r) | True si el resultado contiene al menos una fila. |
| Res_CommandTag(r) | Etiqueta del comando del servidor, por ejemplo INSERT 0 1 o UPDATE 3. |
| Res_AffectedRows(r) | Filas afectadas por INSERT, UPDATE o DELETE. |
| Res_NumRows(r) | Número de filas en el resultado. |
| Res_NumFields(r) | Número de columnas del resultado. |
| Res_FieldName(r, col) | Nombre de la columna en el índice dado. |
| Res_FieldIndex(r, nombre) | Índice de columna para un nombre dado. Devuelve -1 si no se encuentra. |
| Res_Siguiente(r) | Avanza el iterador de filas. Devuelve true mientras queden filas. |
| Res_ResetIterator(r) | Restablece el iterador a antes de la primera fila. |
| Res_IsNull(r, col) | True si el valor de la fila actual en col es NULL. |
| Res_GetValue(r, col) | Valor de la fila actual como cadena por índice de columna. |
| Res_GetValueByName(r, nombre) | Valor de la fila actual como cadena por nombre de columna. |
| Res_GetInt(r, col) | Analiza el valor actual como int. |
| Res_GetLong(r, col) | Analiza el valor actual como long. |
| Res_GetDouble(r, col) | Analiza el valor actual como double. |
| Res_GetBool(r, col) | Analiza el valor actual como bool. |
| Res_GetDatetime(r, col) | Analiza el valor actual como datetime. |
| Res_ErrorMessage(r) | Texto del mensaje de error del servidor cuando Res_IsOk es false. |
| Res_ErrorSQLState(r) | Código SQLSTATE de PostgreSQL de 5 caracteres. |
#include <PostgresLib.mqh> void OnStart() { long h = Pg_Create(); Pg_Connect(h, "127.0.0.1", 5432, "postgres", "postgres", "postgres", false, "MQLPgClient"); long r = Pg_Query(h, "SELECT symbol, price, timestamp FROM trades LIMIT 10"); while(Res_Next(r)) Print(Res_GetValueByName(r, "symbol"), " @ ", Res_GetDouble(r, Res_FieldIndex("price")), " at ", Res_GetValue(r, 2)); Pg_Disconnect(h); Pg_Destroy(h); }
