appeler plusieurs fichiers SQL dans un seul fichier SQL dans Postgres


11

Comment appeler plusieurs fichiers sql dans un seul fichier sql, en postgres

Par exemple, j'ai aaa.sql, bbb.sql, ccc.sql.

Je veux exécuter ces 3 fichiers à partir de xxx.sql.

Quelqu'un peut-il me suggérer comment procéder?

Réponses:


12

Si vous exécutez ces fichiers, psqlvous voulez la \idirective ("exécuter les commandes à partir du fichier").

xxx.sql:

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

Si vous passez ces derniers à travers un autre programme, vous devrez combiner les fichiers vous-même - je ne pense pas qu'il existe une manière standard SQL d'exécuter des fichiers externes.


Merci pour la réponse. Je vais tester et confirmer si j'ai réussi ou non
Trip

Ne semble pas encore travailler Je ne sais pas si je manque quelque chose. ai-je besoin de points-virgules à la fin ??? -Pas vraiment !!!
Voyage le

1
Vous devez être plus précis que « ne fonctionne pas » - Je vous assure que cela ne le travail - Reportez - vous au manuel psql
voretaq7

Ça a marché. Enfin :-) Thanku Le problème était - il n'a pas pu reconnaître le fichier et O a spécifié le chemin relatif pour le fichier et son fonctionnement Merci encore
Trip

@Trip Trip, n'oubliez pas de créditer voretaq pour sa réponse!
Richard T

4

Pas exactement ce que vous demandez, mais servira votre objectif: 1) Mettez tous vos fichiers de script dans un dossier; et 2) utilisez un script bash pour parcourir vos fichiers et exécuter psql. Par exemple:

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

C'est en fait un peu mieux car vous n'aurez pas à taper les noms de vos fichiers.


3

Sur un shell bash, vous pouvez le faire aussi avec un simple find -exec

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

Nécessite que vous utilisiez "*.sql"plutôt que*.sql
Jeel Shah
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.