Rufen Sie in Postgres mehrere SQL-Dateien in einer einzigen SQL-Datei auf


11

Wie rufe ich mehrere SQL-Dateien in einer einzigen SQL-Datei in Postgres auf?

Zum Beispiel habe ich aaa.sql, bbb.sql, ccc.sql.

Ich möchte diese 3 Dateien von xxx.sql ausführen.

Kann mir jemand vorschlagen, wie das geht.

Antworten:


12

Wenn Sie diese Dateien ausführen, psqlmöchten Sie die \iAnweisung ("Befehle aus Datei ausführen").

xxx.sql:

\i aaa.sql
\i bbb.sql
\i ccc.sql

Wenn Sie diese durch ein anderes Programm führen, müssen Sie die Dateien selbst kombinieren. Ich glaube nicht, dass es eine SQL-Standardmethode zum Ausführen externer Dateien gibt.


Danke für Ihre Antwort. Ich werde testen und bestätigen, ob ich es geschafft habe oder nicht
Trip

Sieht noch nicht nach Arbeit aus. Ich bin mir nicht sicher, ob mir etwas fehlt. brauche ich am Ende ein Semikolon ??? -Nicht wirklich !!!
Reise

1
Sie müssen spezifischer sein als "nicht funktionieren" - ich versichere Ihnen, dass dies funktioniert - Siehe das psql-Handbuch
voretaq7

Es funktionierte. Endlich :-) Danke Problem war - es konnte die Datei nicht erkennen und O hat den relativen Pfad für die Datei angegeben und es funktioniert. Nochmals vielen Dank
Trip

@ Trip Trip, vergessen Sie nicht, voretaq Kredit für seine Antwort zu geben!
Richard T

4

Nicht genau das, wonach Sie fragen, aber es wird Ihren Zweck erfüllen: 1) Legen Sie alle Ihre Skriptdateien in einem Ordner ab; und 2) Verwenden Sie ein Bash-Skript, um Ihre Dateien zu durchlaufen und psql auszuführen. Zum Beispiel:

SCRIPTS_DIR=/home/myproject/scripts
DATABASE_NAME=database_name

for file in $SCRIPTS_DIR/*.sql
    do sudo -u postgres psql $DATABASE_NAME -f $file
done

Dies ist in der Tat etwas besser, da Sie die Namen Ihrer Dateien nicht eingeben müssen.


3

Auf einer Bash-Shell kann man das auch mit einem einfachen machen find -exec

find sql/ -name *.sql -exec psql -U user -f {} \;

Erfordert, dass Sie "*.sql"anstatt*.sql
Jeel Shah
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.