PostgreSQL ist kein In-Memory-Embeddable-Server. Es kann nicht einfach als Bibliothek geladen und ausgeführt werden.
Sie benötigen einen Steuercode für die Testumgebung, um:
-
initdb
ein temporäres Datenverzeichnis -
Bearbeiten Sie
postgresql.conf
nach Bedarf durch Anhängen von Zeilen oder durch Aktivieren einesinclude_dir
und darin Dateien ablegen. Wenn Sie nur eine triviale Konfiguration benötigen, können Sie diesen Schritt möglicherweise überspringen. Dinge wie derport
können über Umgebungsvariablen gesetzt werden, und viele andere können mit-c
gesetzt werden Flags zum Server-Startbefehl. -
Generieren Sie eine zufällige Portnummer, die verwendet werden soll
-
Starten Sie den Server – führen Sie
postgres -D the_datadir
aus eine neue Serverinstanz mit demProcess
von Java Management. Sie können benutzerdefinierte Konfigurationswerte mit-c
übergeben und kann auch Umgebungsvariablen setzen, um das Verhalten zu steuern. -
Verbinden Sie sich über JDBC und
CREATE DATABASE
Führen Sie dann Ihr Test-Setup aus -
Führen Sie Ihre Tests durch
-
Stoppen Sie den Server, indem Sie den von Ihnen gestarteten Prozess beenden.
-
Löschen Sie das Datenverzeichnis
Sie sollten die Prozessverwaltung in einer Klasse mit geeigneter Behandlung von temporären Verzeichnissen, Aufräumen bei unsauberem Beenden (beenden Sie den Pg-Server und löschen Sie das Datadir bei Ausnahme) usw.
Ich werde überrascht sein, wenn Sie keinen vorgefertigten Test-Harness-Code finden, den Sie dafür ausleihen können. Ich frage mich, ob wir etwas zu PgJDBC hinzufügen und es im Treiber bündeln sollten? Wenn Sie etwas Gutes finden oder etwas Gutes schreiben, pingen Sie mich bitte an, indem Sie diese Antwort kommentieren, und ich werde sie für die Aufnahme als Utility-Klasse in PgJDBC in Betracht ziehen.
Allerdings ist es viel üblicher, Ihre Tests stattdessen in einer neu erstellten Testdatenbank in einer vorhandenen PostgreSQL-Instanz auszuführen, die bereits auf Ihrem Server ausgeführt wird. Sie konfigurieren einfach Ihre Testsuite mit PostgreSQL-Benutzername/Passwort/Host/Port/Datenbank (oder lassen sie eine Verbindung zum postgres
herstellen Datenbank und CREATE
und DROP
die Datenbank). Schließlich ist immer eine gewisse Konfiguration erforderlich:PostgreSQL installieren oder kompilieren und sicherstellen, dass sich die Binärdateien im PATH
befinden usw.
Eine weitere Option ist die Verwendung von Amazon RDS:Verwenden Sie die AWS RDS-APIs, um eine neue PostgreSQL-Instance zu starten und für Ihre Tests zu verwenden. Dies ist wahrscheinlich nicht praktikabel, es sei denn, Ihre Tests laufen aufgrund der Einrichtungszeit und der minimalen Laufzeit lange, aber es ist eine andere Option, ebenso wie der ähnliche Dienst bei Heroku.