Gibt es eine Postgres-Administrator-GUI, die eine Master-Datei mit mehreren SQL-Dateien ausführen kann?

8

Ich entwickle ein sehr langes Skript. Ich möchte das Skript in kleinere, besser verwaltbare Skripte aufteilen und jede SQL-Datei in eine Master-Datei aufnehmen und dann einfach die Master-Datei ausführen.

Beispiel: master.sql

Inhalt (Ich kenne die zu verwendende Syntax nicht):

file1.sql
file2.sql
file3.sql

Ich habe mehrere Tutorials zur Verwendung psql -fin der Befehlszeile und \izum Einschließen dieser Dateien gefunden. Hier wird jedoch bevorzugt, das Terminal zu meiden und eine GUI zu verwenden, um meine Datenbank zu verwalten und das master.sqlSkript auszuführen .

Ist dies in einer Postgres-Admin-GUI möglich? Vermutlich ist es nicht in pgAdmin.

jbits
quelle
Sie können Ihre SQL-Dateien in jedem Editor bearbeiten (es gibt viel bessere Optionen als pgAdmin) und dann nur einen einzigen Befehl in psql ausführen (sagen wir psql -f master.sql).
Dekso
OK, dann werde ich klar sein: Das können Sie in pgAdmin vermutlich nicht. Wie auch immer, ich kann nicht wirklich verstehen, warum dies ein Problem ist (ich bin möglicherweise zu sehr an diese Einschränkung gewöhnt).
Dekso
Danke für den Kommentar. Und Sie werden in der Lage sein zu sehen , dass es ist ein Problem ohne eine Lösung , wenn Sie versuchen , zu tun , was ich in pgAdmin will. Es kann eine Begrenzung (Wadu) von pgAdmin sein, wie Sie sagen, so dass ich meine Frage bearbeiten würde es zu fragen , öffnen ANY Postgres GUI , die dies tun wird.
jbits
1
SQL Workbench / J kann das: sql-workbench.net/manual/wb-commands.html#command-wbinclude
a_horse_with_no_name
Danke @a_horse_with_no_name. Ich habe in der URL festgestellt, dass: "Wenn das enthaltene SQL-Skript SELECT-Abfragen enthält, wird das Ergebnis dieser Abfragen nicht in der GUI angezeigt." Meine Skripte haben viele ausgewählte Anweisungen. Um diesen Haftungsausschluss zu bestätigen, habe ich dieses Produkt mit dem Befehl WbInclude in einem sehr einfachen Skript getestet, das eine Auswahl enthält, und bestätigt, dass die Ergebnisse nicht angezeigt werden. Ich wundere mich warum? Abgesehen davon funktioniert dieses Produkt definitiv beim Aufrufen anderer Skripte innerhalb von Skripten.
jbits

Antworten:

2

Ein psqlSkript

Ein psql-Skript kann mehrere Dateien indizieren. Nehmen wir an 01_mydb.psql, es befindet sich im aktuellen Arbeitsverzeichnis, und Sie haben ein Verzeichnis 01mit den Dateien 01_schema.sqlund 02_types.sql.

01_mydb.psql kann so aussehen.

\i 01/01_schema.sql
\i 01/02_types.sql

Oder wie auch immer Sie es strukturieren möchten. Wenn die Dinge komplexer werden und mehr Ordnung benötigen, fügen Sie weitere Unterverzeichnisse hinzu

\i 01/10_tables/01_foo.sql
\i 01/10_tables/02_bar.sql

Dann würdest du einfach entweder ..

  1. Fügen Sie eine Indexdatei in 01, so etwas wie./01/10_tables.psql
  2. Oder fügen Sie sie einfach alle hinzu 01_mydb.sql

Ich werde die zweite Methode mit zeigen find,

Verwenden Sie find, um ein Master-Load-Skript zu generieren.

Lassen Sie uns fortfahren und diese Struktur erstellen.

01/
├── 01_schema.psql
├── 02_types.psql
└── 10_tables
    ├── 01_foo.psql
    └── 02_bar.psql

Hier sind die Befehle, mit denen wir es erstellen.

mkdir 01
touch 01/01_schema.sql
touch 01/02_types.sql
mkdir 01/10_tables
touch 01/10_tables/01_foo.sql
touch 01/10_tables/02_bar.sql

Jetzt können Sie findein Ladeskript generieren

find ./01/ -type f -printf '\\i %p\n' | sort | tee master.psql
\i ./01/01_schema.sql
\i ./01/02_types.sql
\i ./01/10_tables/01_foo.sql
\i ./01/10_tables/02_bar.sql

Jetzt lauf einfach master.psql;

psql -d database -f master.psql
Evan Carroll
quelle