PgRoutiner -это набор инструментов командной строки для баз данных PostGRESQL и PostGRESQL .NET Projects.
Используя строку подключения к конфигурации конфигурации .NET (или пользовательское подключение) - вы можете:
Навигация и поиск в базе данных с легкостью.
Создать модели C# и TS и код.
Создать сценарии баз данных и запустить инструменты.
Генерировать документацию на уценке.
Генерировать функции команд CRUD.
Смотрите слайды презентации
Смотрите блог Pgroutiner
Смотрите концептуальный блог PGROUTINER
Смотрите блог управления базами данных PGROUTINER
Смотрите блог PGROUTINER CODE GEN
Смотрите блог документации Pgroutiner
ПРИМЕЧАНИЕ. Все примеры в этом Readme, а также в приведенной выше презентации. Используйте базу данных выборки PostgreSQL из [PostgreSQL Tutorial]
Быстрый старт:
- Загрузите собственные исполняемые файлы (не зависящие от какой -либо структуры) для последней версии с страницы релизов.
- Установите соответствующий путь в загруженный исполняемый файл.
- Тип
pgroutiner --info- Примечание. Работа с местными исполняемыми файлами во много раз быстрее, они очень короткое время запуска, и они предлагают много раз лучше.
Оглавление:
Это самый быстрый и простой способ начать работу с инструментом Pgroutiner. Страница выпусков содержит загружаемые исполняемые файлы, которые не зависят от чего -либо. Никакой структуры или докера не требуется, просто старый старый собственный исполняемый файл.
На самом деле это предпочтительный способ использования инструмента Pgroutiner. Нативные исполняемые файлы очень сильно оптимизированы и имеют очень короткое время запуска, и они предлагают много раз лучше.
Вот шаги:
pgroutiner --info , чтобы увидеть, что он работает.Вот и все.
Для установки глобального инструмента (рекомендуется):
$ dotnet tool install --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' (version '5.4.0') was successfully installed.Чтобы обновить глобальный инструмент:
$ dotnet tool update --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' was successfully updated from version '5.0.7' to version '5.0.8'. Это позволит pgroutiner Tool Global Command Line. Попробуйте напечатать pgroutiner --help .
Чтобы добавить локальный инструмент в ваш проект только вам нужно создать манифестный файл и добавить инструмент без --global коммутатор, как описано в этом уроке.
TL-DR:
Добавьте .config Directory в ваш проект или решение.
Добавить файл dotnet-tools.json в этот каталог со следующим контентом:
{
"version" : 1 ,
"isRoot" : true ,
"tools" : {
"dotnet-pgroutiner" : {
"version" : " 5.0.6 " ,
"commands" : [
" pgroutiner "
]
}
}
} Из вашей командной строки тип dotnet tool restore
Запустите инструмент с dotnet tool run pgroutiner [arguments] , например, dotnet tool run pgroutiner --help
pgroutiner (см. Инструкции выше)pgroutiner --help , чтобы увидеть доступные команды и коммутаторы (список длинный).pgroutiner , чтобы определить новое соединение, если у вас нет - и для создания файла конфигурации по умолчанию для этого DIR. Посмотрите больше об управлении соединениямиpgroutiner --info чтобы увидеть, можно ли подключиться к базе данных и увидеть другую информацию о среде.pgroutiner --list для просмотра списка всех объектов.pgroutiner --ddl [object_name] чтобы увидеть язык определения данных для объекта из второго параметра.pgroutiner --search [search expression] для поиска данных с выражениями поиска. pgroutiner предназначен для запуска от Root .NET Project Root - и он будет читать любые доступные подключения из стандартных файлов json конфигурации (например, appsettings.Development.json и appsettings.json , в этом порядке).
Он будет использовать первую доступную строку подключения из раздела ConnectionStrings :
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
} ПРИМЕЧАНИЕ. Это формат строки подключения NPGSQL, но он также может использовать стандартный формат подключения URL PostGRESQL postgresql://{user}:{password}@{server}:{port}/{database} .
Запуск простой команды Info, чтобы проверить соединение, чтобы увидеть среду:
~$ pgroutiner --info
Version:
5.0.3.0
Executable dir:
/home/vbilopav/.dotnet/tools
OS:
Unix 5.10.102.1
Using configuration files:
appsettings.Development.json
appsettings.json
Using dir:
/home/vbilopav/dev/dvdrental
Using settings:
--info
Using connection DvdRental:
Host=localhost;Database=dvdrental;Port=5432;Username=postgres (PostgreSQL 13.8)
Using project file:
dvdrental.csproj
pg_dump:
pg_dump
pg_restore:
/usr/lib/postgresql/13/bin/pg_restore ~$ pgroutiner
Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password [environment var.]:-c или --connection : ~$ pgroutiner -c ConnectionString2 --info ~$ pgroutiner --connection ConnectionString2 --info Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password: Сервер соединений, порт, база данных и пользователь имеют предопределенные значения по умолчанию ( localhost , 5432 , postgres , postgres ) - нажмите Enter, чтобы пропустить и использовать по умолчанию.
Командная строка может использовать всю строку подключения с -c или --connection -вместо имени подключения:
~$ pgroutiner --connection "Server=localhost;Db=test;Port=5432;User Id=postgres;Password=postgres;" --infopostgresql://{user}:{password}@{server}:{port}/{database} - вместо строки подключения npgsql: {
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
}
} ~$ pgroutiner --connection "postgresql://postgres:postgres@localhost:5432/test" --infoКаждая часть соединения (сервер, порт, база данных, пользователь и пароль) может быть опущены по строке подключения или URL -адреса подключения, и он будет заменен на следующие переменные среды:
PGHOST или PGSERVER заменить параметр отсутствующего сервера.
PGPORT , чтобы заменить отсутствующий параметр порта.
PGDATABASE или PGDB для замены пропущенного параметра базы данных.
PGHOST или PGSERVER заменить параметр отсутствующего сервера.
PGUSER , чтобы заменить отсутствующий параметр пользователя.
PGPASSWORD или PGPASS чтобы заменить параметр отсутствующего пароля.
Каждый возможный параметр командной строки и переключатель может быть настроена в файле конфигурации.
Используйте раздел конфигурации PgRoutiner в конфигурации JSON ( appsettings.json или appsettings.Development.json ), пример:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner будет читать и применять настройки конфигурации в качестве значения по умолчанию, если существует раздел конфигурации PgRoutiner .
Используйте командную строку, чтобы переопределить любые настройки конфигурации.
Как правило, любая настройка конфигурации имеет свой эквивалент в командной строке, поскольку Sitch, начиная с Kebab, начиная с двух тире. Примеры:
SkipConnectionPrompt , командная строка: --skip-connection-promptSchemaSimilarTo , командная строка: --schema-similar-to Многие настройки также имеют псевдоним, например, настройка Connection может быть: -c -conn --conn -connection --connection .
Логические настройки-это переключатели, достаточно включить переключатель без значения, чтобы включить его: pgroutiner --skip-connection-prompt
Добавить false или 0 , чтобы выключить его: pgroutiner --skip-connection-prompt false
Вы можете проверить настройки применения в настоящее время с помощью переключателя --settings . pgroutiner --settings заставят пропустить любую операцию, и он будет отображать только все текущие настройки. Он также отобразит псевдоним командной строки в заголовках комментариев.
Вы также можете запустить pgroutiner --info который, помимо прочего, отображать в настоящее время применяемые настройки, которые отличаются от значений по умолчанию.
Если нет разделения конфигурации PgRoutiner присутствует где -либо, и если вы запускаете pgroutiner без каких -либо параметров, вам будет предложено создать файл конфигурации по умолчанию appsettings.PgRoutiner.json
You don't seem to be using any available command-line commands and PgRoutiner configuration seems to be missing.
Would you like to create a custom settings file "appsettings.PgRoutiner.json" with your current values?
This settings configuration file can be used to change settings for this directory without using a command-line.
Create "appsettings.PgRoutiner.json" in this dir [Y/N]? appsettings.PgRoutiner.json , если существует, всегда будет загружена после appsettings.json и appsettings.Development.json и переопределяет любые возможные значения настройки в этих файлах.
Если вам нужно загрузить эти файлы конфигурации из другого места, вы можете использовать --config-path, for example, pgroutiner -config-path ../../dir2/
Вы также можете использовать любой из этих параметров для загрузки пользовательских файлов конфигурации: -cf , --cf , -config , --config , -config-file , --config-file , например, pgroutiner --config ../../dir2/my-config.json
Вы также можете написать текущие настройки в пользовательскую конфигурацию, используя любую из этих параметров -wcf , --write-config-file , например, pgroutiner --write-config-file ../../dir2/my-config.json
Полный файл конфигурации со всеми значениями по умолчанию для этой текущей версии
Описание: -l -ls --ls --list to dump or search object list to console. Use the switch to dump all objects or parameter values to search.
Примеры:
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --list
SCHEMA public
EXTENSION plpgsql
TYPE mpaa_rating
DOMAIN public.year
TABLE public.actor
VIEW public.actor_info
VIEW public.customer_list
... vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner -l
SCHEMA public
EXTENSION plpgsql
TYPE mpaa_rating
DOMAIN public.year
TABLE public.actor
VIEW public.actor_info
VIEW public.customer_list
... vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner -ls
SCHEMA public
EXTENSION plpgsql
TYPE mpaa_rating
DOMAIN public.year
TABLE public.actor
VIEW public.actor_info
VIEW public.customer_list
... vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --list film
VIEW public.film_list
VIEW public.nicer_but_slower_film_list
VIEW public.sales_by_film_category
TABLE public.film_actor
TABLE public.film_category
TABLE public.film
SEQ public.film_film_id_seq
FUNCTION public.film_in_stock(integer, integer)
FUNCTION public.film_not_in_stock(integer, integer)
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --list actor
TABLE public.actor
VIEW public.actor_info
TABLE public.film_actor
SEQ public.actor_actor_id_seq
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ Описание: -def -ddl --ddl -definition --definition to dump object schema definition in console supplied as a value parameter.
Примеры:
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner -ddl actor
--
-- Table: public.actor
--
CREATE TABLE public.actor (
actor_id integer DEFAULT nextval('public.actor_actor_id_seq'::regclass) NOT NULL PRIMARY KEY,
first_name character varying(45) NOT NULL,
last_name character varying(45) NOT NULL,
last_update timestamp without time zone DEFAULT now() NOT NULL
);
ALTER TABLE public.actor OWNER TO postgres;
CREATE INDEX idx_actor_last_name ON public.actor USING btree (last_name);
CREATE TRIGGER last_updated BEFORE UPDATE ON public.actor FOR EACH ROW EXECUTE FUNCTION public.last_updated();
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner -ddl film
--
-- Table: public.film
--
CREATE TABLE public.film (
film_id integer DEFAULT nextval('public.film_film_id_seq'::regclass) NOT NULL PRIMARY KEY,
title character varying(255) NOT NULL,
description text,
release_year public.year,
language_id smallint NOT NULL,
rental_duration smallint DEFAULT 3 NOT NULL,
rental_rate numeric(4,2) DEFAULT 4.99 NOT NULL,
length smallint,
replacement_cost numeric(5,2) DEFAULT 19.99 NOT NULL,
rating public.mpaa_rating DEFAULT 'G'::public.mpaa_rating,
last_update timestamp without time zone DEFAULT now() NOT NULL,
special_features text[],
fulltext tsvector NOT NULL,
FOREIGN KEY (language_id) REFERENCES public.language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT
);
ALTER TABLE public.film OWNER TO postgres;
CREATE INDEX film_fulltext_idx ON public.film USING gist (fulltext);
CREATE INDEX idx_fk_language_id ON public.film USING btree (language_id);
CREATE INDEX idx_title ON public.film USING btree (title);
CREATE TRIGGER film_fulltext_trigger BEFORE INSERT OR UPDATE ON public.film FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description');
CREATE TRIGGER last_updated BEFORE UPDATE ON public.film FOR EACH ROW EXECUTE FUNCTION public.last_updated();
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --ddl film_in_stock
--
-- Function: public.film_in_stock
--
CREATE FUNCTION public.film_in_stock(
p_film_id integer,
p_store_id integer,
OUT p_film_count integer
)
RETURNS SETOF integer
LANGUAGE sql
AS $_$
SELECT inventory_id
FROM inventory
WHERE film_id = $1
AND store_id = $2
AND inventory_in_stock(inventory_id);
$_$;
ALTER FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) OWNER TO postgres;
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --ddl " actor;film_in_stock "
--
-- Table: public.actor
--
CREATE TABLE public.actor (
actor_id integer DEFAULT nextval('public.actor_actor_id_seq'::regclass) NOT NULL PRIMARY KEY,
first_name character varying(45) NOT NULL,
last_name character varying(45) NOT NULL,
last_update timestamp without time zone DEFAULT now() NOT NULL
);
ALTER TABLE public.actor OWNER TO postgres;
CREATE INDEX idx_actor_last_name ON public.actor USING btree (last_name);
CREATE TRIGGER last_updated BEFORE UPDATE ON public.actor FOR EACH ROW EXECUTE FUNCTION public.last_updated();
--
-- Function: public.film_in_stock
--
CREATE FUNCTION public.film_in_stock(
p_film_id integer,
p_store_id integer,
OUT p_film_count integer
)
RETURNS SETOF integer
LANGUAGE sql
AS $_$
SELECT inventory_id
FROM inventory
WHERE film_id = $1
AND store_id = $2
AND inventory_in_stock(inventory_id);
$_$;
ALTER FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) OWNER TO postgres;
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ Описание: s --s --search to search object schema definitions and dump highlighted results to the console.
Ищет целые определения и дампы, чтобы утешить целые определения, содержащие выражение.
Примечание. Подчеркнуто соответствие экспрессии поиска.
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --search " select public.group_concat "
--
-- View: public.actor_info
--
CREATE VIEW public.actor_info AS
SELECT a.actor_id,
a.first_name,
a.last_name,
public.group_concat(DISTINCT (((c.name)::text || ': '::text) || ( SELECT public.group_concat((f.title)::text) AS group_concat
FROM ((public.film f
JOIN public.film_category fc_1 ON ((f.film_id = fc_1.film_id)))
JOIN public.film_actor fa_1 ON ((f.film_id = fa_1.film_id)))
WHERE ((fc_1.category_id = c.category_id) AND (fa_1.actor_id = a.actor_id))
GROUP BY fa_1.actor_id))) AS film_info
FROM (((public.actor a
LEFT JOIN public.film_actor fa ON ((a.actor_id = fa.actor_id)))
LEFT JOIN public.film_category fc ON ((fa.film_id = fc.film_id)))
LEFT JOIN public.category c ON ((fc.category_id = c.category_id)))
GROUP BY a.actor_id, a.first_name, a.last_name;
ALTER TABLE public.actor_info OWNER TO postgres;
vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ vbilopav@DESKTOP-O3A6QK2:~/dev/dvdrental $ pgroutiner --search smallint
--
-- Table: public.store
--
CREATE TABLE public.store (
store_id integer DEFAULT nextval('public.store_store_id_seq'::regclass) NOT NULL PRIMARY KEY,
manager_staff_id smallint NOT NULL,
address_id smallint NOT NULL,
last_update timestamp without time zone DEFAULT now() NOT NULL,
FOREIGN KEY (address_id) REFERENCES public.address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (manager_staff_id) REFERENCES public.staff(staff_id) ON UPDATE CASCADE ON DELETE RESTRICT
);
ALTER TABLE public.store OWNER TO postgres;
CREATE UNIQUE INDEX idx_unq_manager_staff_id ON public.store USING btree (manager_staff_id);
CREATE TRIGGER last_updated BEFORE UPDATE ON public.store FOR EACH ROW EXECUTE FUNCTION public.last_updated();
--
-- Table: public.address
--
CREATE TABLE public.address (
address_id integer DEFAULT nextval('public.address_address_id_seq'::regclass) NOT NULL PRIMARY KEY,
address character varying(50) NOT NULL,
address2 character varying(50),
district character varying(20) NOT NULL,
city_id smallint NOT NULL,
postal_code character varying(10),
phone character varying(20) NOT NULL,
last_update timestamp without time zone DEFAULT now() NOT NULL,
CONSTRAINT fk_address_city FOREIGN KEY (city_id) REFERENCES public.city(city_id)
);
... В зависимости от команды, этот инструмент запустит внешние процессы с клиентскими инструментами PostgreSQL, такими как psql , pg_dump или pg_restore .
Это означает, что клиентские инструменты PostgreSQL должны быть установлены в системе. Клиентские инструменты PostgreSQL будут установлены по умолчанию с каждой установкой PostGRESQL.
Если вам не нужен сервер, но только клиентские инструменты:
postgresql-client , что-то вроде $ sudo apt-get install -y postgresql-client , но зависит от системы. Когда pgroutiner вызывает внешний инструмент, он сначала попытается вызвать псевдоним по умолчанию psql или pg_dump . Затем, если версия инструмента не соответствует версии из подключения, она попытается найти исполняемый файл в месте по умолчанию:
C:Program FilesPostgreSQL{0}binpg_dump.exe и C:Program FilesPostgreSQL{0}binpsql.exe для систем Windows./usr/lib/postgresql/{0}/bin/pg_dump и /usr/lib/postgresql/{0}/bin/psql для систем Linux.{0} является основным номером версии.Эти пути по умолчанию по умолчанию по умолчанию.
Когда PGROUTINER увидит несоответствие версии, она подчеркнет предупреждение и отступление на этот путь с соответствующим номером версии.
Такого поведения можно избежать путем настройки значений настройки PgDumpFallback и PsqlFallback соответственно.
Это программное обеспечение с открытым исходным кодом, разработанное и поддерживаемое свободно без какой-либо компенсации.
Copyright (C) Vedran Bilopavlović - VB Consulting и VB Software 2020 Этот исходный код лицензирован по лицензии MIT.