Existe uma GUI de administração do Postgres que pode executar um arquivo mestre contendo vários arquivos sql


8

Estou desenvolvendo um roteiro muito longo. Gostaria de dividir o script em scripts menores e mais gerenciáveis ​​e incluir cada arquivo sql em um arquivo mestre, depois apenas executar o arquivo mestre.

exemplo: master.sql

conteúdo (não sei a sintaxe a ser usada):

file1.sql
file2.sql
file3.sql

Encontrei vários tutoriais sobre o uso psql -fna linha de comando e \ipara incluir esses arquivos, mas a preferência aqui é evitar o terminal e usar uma GUI para gerenciar meu banco de dados e executar o master.sqlscript.

Isso é possível em qualquer GUI de administração do postgres? Presumivelmente, não está no pgAdmin.


Você pode editar seus arquivos SQL em qualquer editor (existem opções muito melhores que o pgAdmin) e, em seguida, executar apenas um único comando no psql (por exemplo psql -f master.sql).
Dezso

OK, então vou ficar claro: você presumivelmente não pode fazer isso no pgAdmin. De qualquer forma, não consigo entender por que isso é um problema (posso estar acostumado a essa limitação).
Dez13

Obrigado pelo comentário. E você poderá ver que é um problema sem solução se tentar fazer o que eu quero no pgAdmin. Pode ser uma limitação (WADU) do pgAdmin, como você diz, por isso vou editar minha pergunta para abri-la e solicitar QUALQUER GUI do postgres que faça isso.
jbits


Obrigado @a_horse_with_no_name. Percebi na URL mencionada que: "Se o script SQL incluído contiver consultas SELECT, o resultado dessas consultas não será exibido na GUI". Meus scripts têm muitas instruções selecionadas. Para confirmar este aviso, testei este produto usando o comando WbInclude em um script muito simples que contém um select e confirmei que ele não exibe os resultados. Eu quero saber porque? De qualquer forma, além disso, este produto definitivamente funciona em chamar outros scripts dentro de scripts.
precisa

Respostas:


2

Um psqlscript

Um script psql pode indexar vários arquivos, vamos supor 01_mydb.psql, está no diretório de trabalho atual e você tem um diretório 01que possui os arquivos 01_schema.sqle 02_types.sql.

01_mydb.psql pode ser assim.

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

Ou como você deseja estruturá-lo. Se as coisas ficarem mais complexas e precisarem de mais ordem, adicione mais subdiretórios

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

Então você iria apenas ..

  1. Adicione um arquivo de índice 01, algo como./01/10_tables.psql
  2. Ou apenas adicione-os a todos 01_mydb.sql

Vou mostrar o segundo método usando find,

Usando findpara gerar um script de carregamento principal.

Vamos em frente e criar essa estrutura.

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

Aqui estão os comandos que usamos para criá-lo.,

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

Agora você pode usar findpara gerar um script de carregamento

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

Agora apenas corra master.psql;

psql -d database -f master.psql
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.