.. _cliVersion : ========== CLI версия ========== В качестве альтернативы плагина для Eclipse IDE предоставляется возможность сравнения схем баз данных через командную строку. Для этого необходимо скачать pgCodeKeeper-cli приложение, которое работает автономно. Начало работы ~~~~~~~~~~~~~ Для начала необходимо установить `Java SDK `_ для вашей платформы. Последнюю версию cli сборки можно скачать `здесь `_. В распакованном архиве использовать файл для передачи параметров: **pgcodekeeper-cli.sh** для Linux систем и **pgcodekeeper-cli.bat** для Windows систем. Режимы работы ~~~~~~~~~~~~~ Полный набор параметров, доступных для работы с программой Вы можете посмотреть выполнив команду: :: ./pgcodekeeper-cli.sh --help Консольная версия имеет следующие режимы работы: - :ref:`diffMode` - :ref:`parseMode` - :ref:`graphMode` .. _diffMode : diff """" Режим по-умолчанию, команда для вызова **--mode DIFF**. Сравнивает два источника данных и формирует скрипт миграции. В качестве источника данных может использоваться дамп, проект pgCodeKeeper или база данных. Пример команды для сравнения двух баз данных PostgreSQL и сохранения скрипта миграции в файл. :: ./pgcodekeeper-cli.sh \ --db-type PG \ -o /path/to/file/diff.sql \ -s 'jdbc:postgresql://127.0.0.1:5432/test_1?user=test&password=test' \ -t 'jdbc:postgresql://127.0.0.1:5432/test_2?user=test&password=test' - **--db-type PG** - тип БД. - **-s ** - путь до источника изменений. - **-t ** - путь до приемника изменений. - **- o ** - путь до файла, куда будет сохранен скрипт миграции. Без этого параметра результат отобразится в консоли. .. important:: Сами указатели `-s / --source` и `-t / --target` (не ) могут быть опущены, тогда первые два аргумента без указателя будут использоваться в качестве источника и приемника соответственно. Пример команды для сравнения MS SQL проекта и базы данных и вывода результата в консоль. :: pgcodekeeper-cli.bat \ --mode DIFF \ --db-type MS \ /path/to/project/ \ "jdbc:sqlserver://127.0.0.1;databaseName={master};integratedSecurity=true" Пример команды для сравнения ClickHouse дампа и базы данных и выполнение скрипта на этой же базе данных. :: ./pgcodekeeper-cli.sh \ --mode DIFF \ --db-type CH \ -r \ path/to/file/ch_dumpl.sql \ 'jdbc:ch://127.0.0.1:8123/default?user=test&password=test' Пример вывода результата: :: SET search_path = pg_catalog; CREATE TABLE public.t2 ( id integer NOT NULL, c2 integer NOT NULL, c3 integer NOT NULL ); ALTER TABLE public.t2 OWNER TO test; .. _parseMode : parse """"" Команда **--mode PARSE** позволяет переключить работу в режим сохранения базы данных в виде проекта. Команды, доступные в этом режиме: - **--update-project** - обновление существующего проекта. Пример команды для создания нового проекта на основе данной БД. :: ./pgcodekeeper-cli.sh / --db-type PG / --mode PARSE / -o /path/to/empty_rep/ / 'jdbc:postgresql://127.0.0.0:1/test?user=test&password=test' где - **--db-type ** - тип БД. - **-o ** - указание пути, куда будет сохранен проект. Пример команды для обновления существующего проекта на основе данной БД. :: ./pgcodekeeper-cli.sh / --db-type PG / --mode PARSE / --update-project / -o /path/to/existing_rep/ / 'jdbc:postgresql://0.0.0.0:55001/test?user=test&password=test' .. _graphMode : graph """"" Команда **--mode GRAPH** позволяет переключить работу в режим поиска зависимостей объекта. Команды, доступные в этом режиме: - **--graph-name ** - имя искомого объекта, поддерживает регулярные выражения, при отсутствии параметра, будут показаны зависимости всех объектов. Для функций сигнатура является частью имени. - **--graph-reverse** - обратное направление поиска зависимостей, с данным параметром выполняется поиск объектов, от которых зависит искомый объект. Без этого параметра выполняется поиск всех объектов, которые зависят от искомого. - **--graph-depth ** - глубина поиска зависимостей, по-умолчанию 10. - **--graph-filter-object ** - фильтрация зависимых объектов по типу, отображаются только выбранные типы объектов. - **--graph-invert-filter** - изменение поведения параметра **--graph-filter-object**, выбранные типы объектов скрываются. Пример команды для поиска зависимостей в локальном проекте: :: ./pgcodekeeper-cli.sh --db-type PG \ --mode GRAPH \ --graph-name public.t1 \ --graph-name public.t2 \ --graph-name 'public\.f1\(.*' \ --graph-depth 2 \ --graph-filter-object FUNCTION \ --enable-function-bodies-dependencies \ --src-lib-xml /path/to/rep/.dependencies \ -o result.txt \ /path/to/rep/ где - **--db-type ** - тип БД. - **--enable-function-bodies-dependencies** - поиск зависимостей в телах функций. - **--src-lib-xml ** - файл библиотек для проекта. - **-o ** - файл, куда запишется результат, без этого параметра вывод отобразится в консоли. - **/path/to/rep/** - путь до проекта или url базы данных. Пример команды для поиска зависимостей в MS SQL базе: :: pgcodekeeper-cli.bat \ --db-type MS \ --mode GRAPH \ --graph-name \\[dbo\\].\\[TABLE_1\\] \ --graph-name \\[dbo\\].\\[TABLE_2\\] \ --graph-name '.*TABLE_3.*' \ --graph-depth 2 \ --graph-filter-object FUNCTION \ --enable-function-bodies-dependencies \ -o result.txt \ "jdbc:sqlserver://127.0.0.1;databaseName={master};integratedSecurity=true" Пример вывода результата: :: TABLE public.t1 COLUMN public.t1.id FUNCTION public.f1(bigint) VIEW public.v1 VIEW public.v2 VIEW public.v3 VIEW public.v4 VIEW public.v5 FUNCTION public.f2() VIEW public.v6 VIEW public.v7 TABLE public.t2 VIEW public.v8 vmargs ~~~~~~ Все параметры после специального параметра **-vmargs** будут переданы VM. Использование с ограничениями потребляемой памяти: :: ./pgcodekeeper-cli.sh 1.sql 2.sql -vmargs -Xms256m -Xmx2g Параметр VM *ru.taximaxim.codekeeper.parser.poolsize* позволяет указать количество потоков парсера: :: ./pgcodekeeper-cli.sh 1.sql 2.sql -vmargs -Dru.taximaxim.codekeeper.parser.poolsize=5 Параметр VM *-Dlogback.configurationFile* позволяет указать файл с пользовательскими настройками логирования. :: ./pgcodekeeper-cli.sh 1.sql 2.sql -vmargs -Dlogback.configurationFile=home/user/configs/logback.xml Пример файла конфигурации с логированием debug вывода в файл: :: ${user.home}/.pgcodekeeper-cli/logs/pgcodekeeper-cli.log true true %d{yyyy-MM-dd HH:mm:ss} [%level] [%logger{0}] - %msg%n