Existe-t-il une interface graphique d'administration Postgres qui peut exécuter un fichier maître contenant plusieurs fichiers SQL

8

Je développe un très long script. Je voudrais diviser le script en scripts plus petits et plus faciles à gérer et inclure chaque fichier sql dans un fichier maître, puis exécuter simplement le fichier maître.

exemple: master.sql

contenu (je ne connais pas la syntaxe à utiliser):

file1.sql
file2.sql
file3.sql

J'ai trouvé plusieurs tutoriels sur l'utilisation psql -fen ligne de commande et \isur l'inclusion de ces fichiers, mais la préférence ici est d'éviter le terminal et d'utiliser une interface graphique pour gérer ma base de données et exécuter le master.sqlscript.

Est-ce possible dans n'importe quelle interface graphique d'administration postgres? Vraisemblablement, ce n'est pas dans pgAdmin.

jbits
la source
Vous pouvez modifier vos fichiers SQL dans n'importe quel éditeur (il existe de bien meilleures options que pgAdmin), puis exécuter une seule commande dans psql (par exemple psql -f master.sql).
dezso
OK, alors je serai clair: vous ne pouvez probablement pas le faire dans pgAdmin. Quoi qu'il en soit, je ne vois pas vraiment pourquoi c'est un problème (je suis peut-être trop habitué à cette limitation).
dezso
Merci pour le commentaire. Et vous serez en mesure de voir qu'il est un problème sans solution si vous essayez de faire ce que je veux dans pgAdmin. Il peut s'agir d'une limitation (WADU) de pgAdmin, comme vous le dites, donc je vais modifier ma question pour l'ouvrir à demander TOUTE GUI postgres qui fera cela.
jbits
1
SQL Workbench / J peut le faire: sql-workbench.net/manual/wb-commands.html#command-wbinclude
a_horse_with_no_name
Merci @a_horse_with_no_name. J'ai remarqué dans l'URL référencée que: "Si le script SQL inclus contient des requêtes SELECT, le résultat de ces requêtes ne sera pas affiché dans l'interface graphique". Mes scripts ont de nombreuses instructions select. Pour confirmer cette clause de non-responsabilité, j'ai testé ce produit à l'aide de la commande WbInclude sur un script très simple contenant une sélection et j'ai confirmé qu'il n'affiche pas les résultats. Je me demande pourquoi? Quoi qu'il en soit, à part cela, ce produit fonctionne certainement pour appeler d'autres scripts dans les scripts.
jbits

Réponses:

2

Un psqlscript

Un script psql peut indexer plusieurs fichiers, supposons qu'il se 01_mydb.psqltrouve dans le répertoire de travail actuel, et vous avez un répertoire 01qui contient les fichiers 01_schema.sqlet 02_types.sql.

01_mydb.psql peut ressembler à ceci.

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

Ou comme vous voulez le structurer. Si les choses deviennent plus complexes et nécessitent plus d'ordre, ajoutez plus de sous-répertoires

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

Ensuite, vous feriez simplement soit ..

  1. Ajoutez un fichier d'index 01, quelque chose comme./01/10_tables.psql
  2. Ou, ajoutez-les tous à 01_mydb.sql

Je vais montrer la deuxième méthode en utilisant find,

Utilisation findpour générer un script de chargement principal.

Allons de l'avant et créons cette structure.

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

Voici les commandes que nous utilisons pour le créer.,

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

Vous pouvez maintenant utiliser findpour générer un script de chargement

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

Maintenant, lancez-vous master.psql;

psql -d database -f master.psql
Evan Carroll
la source