psql
Ich stand vor dem Dilemma, einige Konsolenbefehle ausführen zu müssen, weil ein Kollege \i
die Direktive von psql in einem gespeicherten Skript verwenden musste, um zusätzliche SQL-Anweisungen aus einer anderen Datei auszuführen. Dabei fiel mir auf, dass psql an diesen Dateien scheiterte, weil pgAdmin einige zusätzliche unbrauchbare Zeichen in sie schrieb:
psql:C:/tmp/junk.sql:3: ERROR: syntax error at or near "CREATE"
LINE 1: CREATE TABLE junktable (
psql
wird hier benötigt, da \i
es kein offizieller Teil von SQL ist. Es wird also nicht ausgeführt, wenn Sie einen solchen Befehl direkt an den Interpreter der Datenbank senden, selbst wenn dieser eine Möglichkeit hätte, auf die Dateien auf Ihrer lokalen Festplatte zuzugreifen.
Der Einfachheit halber wollte ich eine Möglichkeit finden, den SQL-Editor von PgAdmin gut mit Postgres zu kompatibel zu machen, damit ich anderen Leuten bei der Arbeit nicht plötzlich sagen muss, sie sollen einen anderen Editor herunterladen und installieren, nur um das Problem zu umgehen; sie kennen und verwenden pgAdmin bereits.
Ähnliche Fragen:
- https://stackoverflow.com/questions/9736085/run-a-postgresql-sql-file-using-command-line-args
- https://stackoverflow.com/questions/129445/postgresql-psql-i-wie-führt-man-ein-Skript-in-einem-gegebenen-Pfad-aus?
- Wie führe ich eine SQL-Datei in PostgreSQL 9.2.6 + CentOs aus?
- https://serverfault.com/a/356722/275718
Antwort1
Glücklicherweise gibt es eine Lösung, die keine Änderungen an psql.exe oder ähnliches erfordert.
Wenn Sie in den Optionen von PgAdmin III (Datei -> Optionen) herumstöbern, finden Sie unter der Überschrift „Abfragetool“ in „Datei abfragen“ eine Kontrollkästchen-Umschaltoption für „BOM für UTF-Dateien schreiben“.
Sobald Sie auf „OK“ klicken, sollten Sie in der Lage sein, Dateien aus PgAdmin zu speichern, die mit der gepackten Version von psql.exe funktionieren. Wenn Sie vorhandene Dateien haben, die die UTF-BOM-Tabelle enthielten, die psql daran hinderte, sie richtig zu lesen, können Sie sie aus dem SQL-Abfrageeditor von PgAdmin laden und dann einfach die Option „Speichern unter“ verwenden, um sie an Ort und Stelle zu speichern. Es sollte auch funktionieren, wenn Sie nur eine kleine Änderung vornehmen, wie das Hinzufügen einer Kommentarzeile und ein normales Speichern (Strg-S).