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.