PgRoutiner est un ensemble d'outils de ligne de commande pour les bases de données PostgreSQL et les projets PostgreSQL .NET.
Utilisation de votre chaîne de connexion du projet de configuration .NET (ou connexion définie personnalisée) - vous pouvez:
Naviguez et recherchez facilement la base de données.
Générez les modèles et le code C # et TS.
Générez des scripts de base de données et exécutez des outils.
Générez la documentation de Markdown.
Générer des fonctions de commande crud.
Voir les diapositives de présentation
Voir le blog Pigroutiner
Voir le blog du concept de Pigroutiner
Voir le blog de gestion de la base de données PGROUTTINER
Voir le blog de génération de code PGROUTTINER
Voir le blog de documentation Pigroutiner
Remarque: Tous les exemples de cette lecture, ainsi que dans la présentation ci-dessus, utilisent la base de données PostgreSQL de [Tutoriel PostgreSQL]
Démarrage rapide:
- Téléchargez des fichiers exécutables natifs (pas dépendants de n'importe quel framework) pour la dernière version de la page des versions.
- Définissez le chemin d'accès approprié vers le fichier exécutable téléchargé.
- Tapez
pgroutiner --info- Remarque: Travailler avec des exécutables natifs est beaucoup plus rapide, ils sont très courts de démarrage et ils offrent plusieurs fois une meilleure expérience utilisateur.
Table des matières:
C'est le moyen le plus rapide et le plus simple de commencer avec l'outil PGROINTER. La page des versions contient des exécutables téléchargeables qui ne dépendent de rien. Aucun cadre ou docker n'est requis, tout simplement un ancien exécutable natif.
Il s'agit en fait de la façon préférable d'utiliser l'outil Pgroutiner. Les exécutables natifs sont très optimisés et ont un temps de démarrage très court et ils offrent plusieurs fois une meilleure expérience utilisateur.
Voici les étapes:
pgroutiner --info pour voir f cela fonctionne.C'est ça.
Pour installer un outil global (recommandé):
$ dotnet tool install --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' (version '5.4.0') was successfully installed.Pour mettre à jour un outil global:
$ dotnet tool update --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' was successfully updated from version '5.0.7' to version '5.0.8'. Cela permettra un outil global de ligne de commande pgroutiner . Essayez de taper pgroutiner --help .
Pour ajouter un outil local à votre projet, vous devez créer un fichier manifeste et ajouter un outil sans --global Switch comme décrit dans ce tutoriel.
TL-DR:
Ajoutez un répertoire .config à votre projet ou solution.
Ajoutez un fichier dotnet-tools.json à ce répertoire avec le contenu suivant:
{
"version" : 1 ,
"isRoot" : true ,
"tools" : {
"dotnet-pgroutiner" : {
"version" : " 5.0.6 " ,
"commands" : [
" pgroutiner "
]
}
}
} À partir de votre type de ligne de commande dotnet tool restore
Exécutez l'outil avec dotnet tool run pgroutiner [arguments] , par exemple, dotnet tool run pgroutiner --help
pgroutiner (voir les instructions ci-dessus)pgroutiner --help pour voir les commandes et commutateurs disponibles (la liste est longue).pgroutiner pour définir une nouvelle connexion si vous n'en avez pas - et pour créer le fichier de configuration par défaut pour ce DIR. En savoir plus sur la gestion des connexionspgroutiner --info pour voir si vous pouvez vous connecter à la base de données et voir d'autres informations sur l'environnement.pgroutiner --list pour voir la liste de tous les objets.pgroutiner --ddl [object_name] pour voir le langage de définition des données pour l'objet du deuxième paramètre.pgroutiner --search [search expression] pour rechercher les définitions de données avec l'expression de la recherche. Le pgroutiner est conçu pour s'exécuter à partir de la racine du projet .NET - et il lira toutes les connexions disponibles à partir de fichiers JSON de configuration standard (comme appsettings.Development.json et appsettings.json , dans cet ordre).
Il utilisera la première chaîne de connexion disponible à partir de la section ConnectionStrings :
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
} Remarque: Il s'agit du format de chaîne de connexion NPGSQL, mais il peut également utiliser le format de connexion URL postgresql standard postgresql://{user}:{password}@{server}:{port}/{database} .
Exécution de la commande d'informations simples pour tester la connexion pour voir l'environnement:
~$ 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 ou --connection : ~$ pgroutiner -c ConnectionString2 --info ~$ pgroutiner --connection ConnectionString2 --info Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password: Le serveur de connexion, le port, la base de données et l'utilisateur ont des valeurs par défaut prédéfinies ( localhost , 5432 , postgres , postgres ) - appuyez sur Entrée pour sauter et utiliser la valeur par défaut.
La ligne de commande peut utiliser la chaîne de connexion entière avec -c ou --connection - au lieu du nom de connexion:
~$ pgroutiner --connection "Server=localhost;Db=test;Port=5432;User Id=postgres;Password=postgres;" --infopostgresql://{user}:{password}@{server}:{port}/{database} - au lieu de la chaîne de connexion NPGSQL: {
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
}
} ~$ pgroutiner --connection "postgresql://postgres:postgres@localhost:5432/test" --infoChaque partie de la connexion (serveur, port, base de données, utilisateur et mot de passe) peut être omise de la chaîne de connexion ou de l'URL de connexion et elle sera remplacée par les variables d'environnement suivantes:
PGHOST ou PGSERVER pour remplacer le paramètre du serveur manquant.
PGPORT pour remplacer le paramètre de port manquant.
PGDATABASE ou PGDB pour remplacer le paramètre de base de données manquante.
PGHOST ou PGSERVER pour remplacer le paramètre du serveur manquant.
PGUSER pour remplacer le paramètre utilisateur manquant.
PGPASSWORD ou PGPASS pour remplacer le paramètre de mot de passe manquant.
Chaque option de ligne de commande possible et commutateur peut être configurée dans le fichier de configuration.
Utilisez la section de configuration PgRoutiner dans la configuration JSON ( appsettings.json ou appsettings.Development.json ), exemple:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner lira et appliquera les paramètres de configuration comme valeur par défaut si la section de configuration PgRoutiner existe.
Utilisez la ligne de commande pour remplacer tous les paramètres de configuration.
En règle générale, tout paramètre de configuration a son équivalent dans la ligne de commande en tant que Sitch basé sur le kebab commençant par deux tirets. Exemples:
SkipConnectionPrompt , ligne de commande: --skip-connection-promptSchemaSimilarTo , ligne de commande: --schema-similar-to De nombreux paramètres ont également un alias de raccourci, par exemple, le paramètre Connection peut être soit: -c -conn --conn -connection --connection .
Les paramètres booléens sont des commutateurs, il est suffisant pour inclure un commutateur sans valeur pour l'allumer: pgroutiner --skip-connection-prompt
Ajouter false ou 0 pour le désactiver: pgroutiner --skip-connection-prompt false
Vous pouvez inspecter les paramètres actuellement appliqués avec le commutateur --settings . pgroutiner --settings obligeront à ignorer toute opération et il affichera uniquement tous les paramètres actuels. Il affichera également des alias de ligne de commande dans les en-têtes de commentaire.
Vous pouvez également exécuter pgroutiner --info qui, entre autres, affichera des paramètres actuellement appliqués qui diffèrent des valeurs par défaut.
S'il n'y a pas de section de configuration PgRoutiner est présente n'importe où, et si vous exécutez pgroutiner sans aucun paramètre, il vous sera proposé pour créer le fichier de configuration par défaut 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 , si existe, sera toujours chargé après les appsettings.json et appsettings.Development.json et remplacer toutes les valeurs de réglage possibles dans ces fichiers.
Si vous avez besoin de charger ces fichiers de configuration à partir d'un emplacement différent, vous pouvez utiliser --config-path, for example, pgroutiner - -config-path ../../dir2/
Vous pouvez également utiliser l'une de ces options pour charger des fichiers de configuration personnalisés: -cf , --cf , -config , --config , -config-file , --config-file , par exemple, pgroutiner --config ../../dir2/my-config.json
Vous pouvez également écrire des paramètres actuels sur une configuration personnalisée en utilisant l'une de ces options -wcf , --write-config-file , par exemple, pgroutiner --write-config-file ../../dir2/my-config.json
Le fichier de configuration complet avec toutes les valeurs par défaut pour cette version actuelle
Description: -l -ls --ls --list to dump or search object list to console. Use the switch to dump all objects or parameter values to search.
Exemples:
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 $ Description: -def -ddl --ddl -definition --definition to dump object schema definition in console supplied as a value parameter.
Exemples:
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 $ Description: s --s --search to search object schema definitions and dump highlighted results to the console.
Recherche des définitions et des vidages entières pour consoler des définitions entières contenant l'expression.
Remarque: la correspondance de l'expression de la recherche est mise en évidence.
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)
);
... Selon la commande, cet outil commencera les processus externes avec des outils clients PostgreSQL comme psql , pg_dump ou pg_restore .
Cela signifie que les outils clients postgresql doivent être installés sur le système. Les outils clients PostgreSQL seront installés par défaut avec chaque installation PostgreSQL.
Si vous ne voulez pas de serveur, mais uniquement des outils clients:
postgresql-client serait suffisante, quelque chose comme $ sudo apt-get install -y postgresql-client , mais dépend du système. Lorsque pgroutiner appelle un outil externe, il essaiera d'abord d'appeler l'alias par défaut psql ou pg_dump . Ensuite, si la version de l'outil ne correspond pas à la version à partir de la connexion, elle essaiera de localiser l'exécutable à l'emplacement par défaut:
C:Program FilesPostgreSQL{0}binpg_dump.exe et C:Program FilesPostgreSQL{0}binpsql.exe pour les systèmes Windows./usr/lib/postgresql/{0}/bin/pg_dump et /usr/lib/postgresql/{0}/bin/psql pour les systèmes Linux.{0} est le principal numéro de version.Ces chemins sont des binaires d'installation de PostgreSQL par défaut.
Lorsque Pgroutiner voit l'inadéquation de la version, cela invitera un avertissement et un repli vers ce chemin avec un numéro de version approprié.
Ce comportement peut être évité par les paramètres respectivement des valeurs PgDumpFallback et PsqlFallback .
Il s'agit d'un logiciel open source développé et maintenu librement sans aucune compensation.
Copyright (C) Vedran Bilopavlović - VB Consulting et VB Software 2020 Ce code source est sous licence MIT.