Esiste una GUI di amministrazione di Postgres in grado di eseguire un file master contenente più file sql


8

Sto sviluppando una sceneggiatura davvero lunga. Vorrei suddividere lo script in script più piccoli e più gestibili e includere ogni file sql in un file master, quindi eseguire semplicemente il file master.

esempio: master.sql

contenuto (non conosco la sintassi da usare):

file1.sql
file2.sql
file3.sql

Ho trovato diversi tutorial sull'uso psql -fnella riga di comando e \iper includere questi file, ma la preferenza qui è quella di evitare il terminale e usare una GUI per gestire il mio database ed eseguire lo master.sqlscript.

Questo è possibile in qualsiasi interfaccia di amministrazione di Postgres? Presumibilmente non è in pgAdmin.


Puoi modificare i tuoi file SQL in qualsiasi editor (ci sono opzioni molto migliori di pgAdmin) e quindi eseguire un solo comando in psql (diciamo psql -f master.sql).
dezso

OK, allora sarò chiaro: presumibilmente non puoi farlo in pgAdmin. Ad ogni modo, non riesco davvero a capire perché questo sia un problema (potrei essere troppo abituato a questa limitazione).
dezso

Grazie per il commento. E sarai in grado di vedere che è un problema senza una soluzione se provi a fare quello che voglio in pgAdmin. Potrebbe essere una limitazione (WADU) di pgAdmin, come dici tu, quindi modificherò la mia domanda per aprirla e chiedere QUALSIASI GUI postgres che lo farà.
jbits


Grazie @a_horse_with_no_name. Ho notato nell'URL di riferimento che: "Se lo script SQL incluso contiene query SELECT, il risultato di tali query non verrà visualizzato nella GUI". I miei script hanno molte dichiarazioni selezionate. Per confermare questo disclaimer, ho testato questo prodotto usando il comando WbInclude su uno script molto semplice contenente una selezione e ho confermato che non visualizza i risultati. Mi chiedo perché? Ad ogni modo, a parte questo, questo prodotto funziona sicuramente nel chiamare altri script all'interno di script.
jbits

Risposte:


2

Una psqlsceneggiatura

Uno script psql può indicizzare più file, supponiamo 01_mydb.psql, sia nella directory di lavoro corrente e tu hai una directory 01che ha i file 01_schema.sqle 02_types.sql.

01_mydb.psql potrebbe assomigliare a questo.

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

O comunque vuoi strutturarlo. Se le cose diventano più complesse e richiedono più ordine, aggiungi più sottodirectory

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

Quindi vorresti solo ..

  1. Aggiungi un file indice in 01, qualcosa del genere./01/10_tables.psql
  2. Oppure aggiungili tutti a 01_mydb.sql

Mostrerò il secondo metodo usando find,

Utilizzo findper generare uno script di caricamento principale.

Andiamo avanti e creiamo quella struttura.

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

Ecco i comandi che usiamo per crearlo.,

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

Ora puoi usare findper generare uno script di caricamento

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

Ora corri e basta master.psql;

psql -d database -f master.psql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.