¿Existe una GUI de administrador de Postgres que pueda ejecutar un archivo maestro que contenga múltiples archivos sql

8

Estoy desarrollando un guión realmente largo. Me gustaría dividir el script en scripts más pequeños y manejables e incluir cada archivo sql en un archivo maestro, luego simplemente ejecutar el archivo maestro.

ejemplo: master.sql

contenido (no sé la sintaxis para usar):

file1.sql
file2.sql
file3.sql

He encontrado varios tutoriales sobre el uso psql -fen la línea de comandos e \iincluir estos archivos, pero la preferencia aquí es evitar el terminal y usar una GUI para administrar mi base de datos y ejecutar el master.sqlscript.

¿Es esto posible en cualquier GUI de administrador de Postgres? Es de suponer que es no en pgAdmin.

jbits
fuente
Puede editar sus archivos SQL en cualquier editor (hay opciones mucho mejores que pgAdmin) y luego solo ejecuta un comando en psql (digamos psql -f master.sql).
dezso
Bien, entonces estaré claro: presumiblemente no puedes hacer eso en pgAdmin. De todos modos, realmente no puedo ver por qué esto es un problema (puedo estar demasiado acostumbrado a esta limitación).
dezso
Gracias por el comentario. Y podrá ver que es un problema sin solución si intenta hacer lo que quiero en pgAdmin. Puede ser una limitación (WADU) de pgAdmin, como usted dice, así que editaré mi pregunta para abrirla y solicitar CUALQUIER GUI de postgres que haga esto.
jbits
1
SQL Workbench / J puede hacer eso: sql-workbench.net/manual/wb-commands.html#command-wbinclude
a_horse_with_no_name
Gracias @a_horse_with_no_name. Noté en la URL referenciada que: "Si el script SQL incluido contiene consultas SELECT, el resultado de esas consultas no se mostrará en la GUI". Mis guiones tienen muchas declaraciones selectas. Para confirmar este descargo de responsabilidad, probé este producto usando el comando WbInclude en un script muy simple que contiene una selección y confirmó que no muestra los resultados. ¿Me pregunto porque? De todos modos, aparte de eso, este producto definitivamente funciona llamando a otros scripts dentro de scripts.
jbits

Respuestas:

2

Un psqlguión

Una secuencia de comandos psql puede indexar varios archivos, supongamos que 01_mydb.psqlestá en el directorio de trabajo actual, y tiene un directorio 01que tiene los archivos 01_schema.sqly 02_types.sql.

01_mydb.psql puede verse así.

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

O como quieras estructurarlo. Si las cosas se vuelven más complejas y necesitan más orden, agregue más subdirectorios

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

Entonces tú solo ...

  1. Agregue un archivo de índice 01, algo así como./01/10_tables.psql
  2. O simplemente agréguelos a 01_mydb.sql

Mostraré el segundo método usando find,

Utilizando findpara generar un script de carga maestra.

Avancemos y creemos esa estructura.

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

Aquí están los comandos que usamos para 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

Ahora puede usar findpara generar un script de carga

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

Ahora solo corre master.psql;

psql -d database -f master.psql
Evan Carroll
fuente