Есть ли административный интерфейс Postgres, который может выполнять мастер-файл, содержащий несколько файлов SQL

8

Я разрабатываю очень длинный сценарий. Я хотел бы разбить сценарий на более мелкие, более управляемые сценарии и включить каждый файл sql в мастер-файл, а затем просто выполнить мастер-файл.

пример: master.sql

содержание (я не знаю синтаксис для использования):

file1.sql
file2.sql
file3.sql

Я нашел несколько учебных пособий по использованию psql -fв командной строке и \iпо включению этих файлов, но здесь я предпочитаю избегать использования терминала и использовать графический интерфейс для управления моей базой данных и выполнения master.sqlсценария.

Это возможно в любом интерфейсе администратора postgres? Предположительно это не в pgAdmin.

Jbits
источник
Вы можете редактировать свои файлы SQL в любом редакторе (есть намного лучшие варианты, чем в pgAdmin), а затем запустить только одну команду в psql (скажем psql -f master.sql).
Дезсо
Хорошо, тогда я буду ясен: вы, вероятно, не можете сделать это в pgAdmin. Во всяком случае, я не могу понять, почему это проблема (возможно, я слишком привык к этому ограничению).
Дезсо
Спасибо за комментарий. И вы будете в состоянии видеть , что это является проблемой , без решения , если вы пытаетесь сделать то , что я хочу в pgAdmin. Как вы говорите, это может быть ограничение (WADU) для pgAdmin, поэтому я отредактирую свой вопрос, чтобы открыть его для запроса ЛЮБОГО GUI postgres, который сделает это.
JBit
1
SQL Workbench / J может сделать это: sql-workbench.net/manual/wb-commands.html#command-wbinclude
a_horse_with_no_name
Спасибо @a_horse_with_no_name. Я заметил в URL, на который ссылаются, что: «Если включенный скрипт SQL содержит запросы SELECT, результат этих запросов не будет отображаться в графическом интерфейсе». Мои сценарии имеют много утверждений выбора. Чтобы подтвердить этот отказ, я протестировал этот продукт с помощью команды WbInclude на очень простом скрипте, содержащем выбор, и подтвердил, что он не отображает результаты. Интересно, почему? В любом случае, кроме этого, этот продукт определенно работает при вызове других скриптов внутри скриптов.
JBit

Ответы:

2

psqlсценарий

Сценарий psql может индексировать несколько файлов, предположим 01_mydb.psql, находится в текущем рабочем каталоге, и у вас есть каталог, в 01котором есть файлы 01_schema.sqlи 02_types.sql.

01_mydb.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

Тогда вы просто либо ..

  1. Добавьте индексный файл 01, что-то вроде./01/10_tables.psql
  2. Или просто добавьте их все 01_mydb.sql

Я покажу второй метод, используя find,

Использование findдля генерации сценария мастер-загрузки.

Давайте продолжим и создадим эту структуру.

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

Вот команды, которые мы используем для его создания.,

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

Теперь вы можете использовать findдля создания сценария загрузки

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

Теперь просто беги master.psql;

psql -d database -f master.psql
Эван Кэрролл
источник