PostgreSQL Client
- Bibliotheken
- Romeu Bertho
- Version: 1.0
- Aktivierungen: 5
Ein vollständiger PostgreSQL-Client, implementiert in reinem MQL5 über native MetaTrader 5 TCP-Sockets.
Die Bibliothek implementiert den PostgreSQL-Client mit MD5- und SCRAM-SHA-256-Authentifizierung, SSL/TLS, dem Simple Query Protocol und expliziten Transaktionen.
Keine DLLs, keine externen Abhängigkeiten, keine Dienste von Drittanbietern.
Merkmale
Direkte TCP-Verbindung zu jeder PostgreSQL-kompatiblen Datenbank
MD5- und SCRAM-SHA-256-Authentifizierung, automatische Erkennung
SSL/TLS über den SSLRequest-Flow von PostgreSQL
Vollständige Transaktionsunterstützung
Typisierte Ergebnis-Accessoren mit NULL-Erkennung
Bad-Handle-Safe - bringt Ihren EA nicht zum Absturz
Kompatibilität
Entwickelt für PostgreSQL > 7.4 bis 18
RDS PostgreSQLAmazon Aurora PostgreSQL
Supabase (Cloud und selbstgehostet)
CockroachDB
CrateDB
YugabyteDB
Google Cloud SQL für PostgreSQL
Azure Database für PostgreSQL
Erste Schritte
Übergeben Sie useSSL = true an Pg_Connect . Die Bibliothek führt die standardmäßige PostgreSQL SSLRequest-Verhandlung durch und aktualisiert auf TLS über SocketTlsHandshake . Wenn der Server die Anfrage ablehnt, gibt der Client eine Warnung aus und setzt die Verbindung unverschlüsselt fort.
Führen Sie jede SQL-Anweisung - INSERT , UPDATE , DELETE , DDL - durch einen einzigen Pg_Query-Aufruf aus. Jeder Aufruf gibt ein Ergebnis-Handle zurück, dessen Lebenszyklus vom Client verwaltet wird: Das vorherige Ergebnis auf demselben Client wird automatisch freigegeben, wenn die nächste Abfrage ausgeführt wird.
Pg_Begin , Pg_Commit und Pg_Rollback bieten Ein-Aufruf-Verschalungen um die Standard-SQL-Transaktionsbefehle. Für verschachtelte Fehlerbehebung verwenden Sie Savepoints ( SAVEPOINT name / ROLLBACK TO name ) über Pg_Query .
Client-Funktionen| Funktion | Beschreibung |
|---|---|
| Pg_Version() | Gibt den String der Bibliotheksversion zurück. |
| Pg_Create() | Weist ein neues Client-Handle zu. Gibt im Fehlerfall 0 zurück. |
| Pg_Destroy(h) | Gibt das Client-Handle und sein aktuelles Ergebnis frei. |
| Pg_Connect(h, host, port, db, user, pass, ssl, app) | Stellt eine Verbindung her und authentifiziert sich gegenüber dem Server. |
| Pg_Disconnect(h) | Sendet eine Terminate-Nachricht und schließt den Socket sauber. |
| Pg_IsConnected(h) | Nur wahr, wenn die Verbindung im Zustand READY ist. |
| Pg_IsAlive(h) | True, wenn der Socket offen ist und das Protokoll mindestens READY ist. |
| Pg_Ping(h) | Führt SELECT 1 aus, um zu überprüfen, ob die Verbindung in Ordnung ist. |
| Pg_Query(h, sql) | Führt eine beliebige SQL-Anweisung aus und gibt ein Ergebnis-Handle zurück. |
| Pg_Begin(h) | Startet eine Transaktion und gibt ein Ergebnis-Handle zurück. |
| Pg_Commit(h) | Setzt die aktuelle Transaktion fest. |
| Pg_Rollback(h) | Rollt die aktuelle Transaktion zurück. |
| Pg_LastError(h) | Gibt die letzte Fehlermeldung auf Protokoll- oder Socket-Ebene zurück. |
| Funktion | Beschreibung |
|---|---|
| Res_IsOk(r) | True, wenn die Abfrage erfolgreich war. |
| Res_HasRows(r) | Wahr, wenn das Ergebnis mindestens eine Zeile enthält. |
| Res_CommandTag(r) | Server-Befehls-Tag, zum Beispiel INSERT 0 1 oder UPDATE 3. |
| Res_AffectedRows(r) | Von INSERT, UPDATE oder DELETE betroffene Zeilen. |
| Res_NumRows(r) | Anzahl der Zeilen im Ergebnis. |
| Res_NumFields(r) | Anzahl der Spalten im Ergebnis. |
| Res_FieldName(r, col) | Spaltenname am angegebenen Index. |
| Res_FieldIndex(r, name) | Spaltenindex für einen gegebenen Namen. Gibt -1 zurück, wenn nicht gefunden. |
| Res_Next(r) | Bringt den Zeilen-Iterator weiter. Gibt true zurück, solange Zeilen übrig sind. |
| Res_ResetIterator(r) | Setzt die Iteration vor die erste Zeile zurück. |
| Res_IsNull(r, col) | True, wenn der Wert der aktuellen Zeile bei col NULL ist. |
| Res_GetValue(r, col) | Aktueller Zeilenwert als String nach Spaltenindex. |
| Res_GetValueByName(r, name) | Aktueller Zeilenwert als String nach Spaltenname. |
| Res_GetInt(r, col) | Analysiert den aktuellen Wert als int. |
| Res_GetLong(r, col) | Analysiert den aktuellen Wert als Long. |
| Res_GetDouble(r, col) | Analysiert den aktuellen Wert als Double. |
| Res_GetBool(r, col) | Analysiert den aktuellen Wert als bool. |
| Res_GetDatetime(r, col) | Analysiert den aktuellen Wert als datetime. |
| Res_ErrorMessage(r) | Text der Server-Fehlermeldung, wenn Res_IsOk falsch ist. |
| Res_ErrorSQLState(r) | 5-stelliger PostgreSQL SQLSTATE-Code. |
#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); }
