PgRoutiner ist eine Reihe von Befehlszeilen-Tools für PostgreSQL-Datenbanken und PostgreSQL .NET-Projekte.
Verwenden Sie Ihre .NET -Konfigurationsprojektverbindungszeichenfolge (oder Ihre benutzerdefinierte Verbindung) - Sie können:
Navigieren Sie und suchen Sie die Datenbank mühelos.
Generieren Sie C #- und TS -Modelle und Code.
Generieren Sie Datenbankskripte und führen Sie Tools aus.
Generieren Sie die Dokumentation von Markdowns.
CRUD -Befehlsfunktionen erzeugen.
Siehe die Präsentationsfolien
Siehe den PGROURINER -Blog
Siehe den PGROURINER CONCECT -Blog
Siehe Blog des PGROURINER -Datenbankverwaltungsmanagements
Sehen Sie sich den PGROURINER CODE-Gen-Blog an
Siehe den Blog PGROURINER Dokumentation
Hinweis: Alle Beispiele in dieser Readme sowie in der obigen Präsentation verwenden Sie die PostgreSQL -Beispieldatenbank aus [Postgresql Tutorial]
Schneller Start:
- Laden Sie native ausführbare Dateien herunter (nicht abhängig von einem Framework) für die neueste Version von der Releases -Seite.
- Setzen Sie den entsprechenden Pfad in die heruntergeladene ausführbare Datei.
- Geben Sie
pgroutiner --info- HINWEIS: Die Arbeit mit nativen ausführbaren Dingen ist um ein Vielfaches schneller, sie sind sehr kurze Start -up -Zeit und bieten ein Vielfaches ein um ein Vielfaches besseres Benutzererlebnis.
Inhaltsverzeichnis:
Dies ist der schnellste und einfachste Weg, um mit dem PGROUTINER -Tool zu beginnen. Die Seite "Releases" enthält herunterladbare ausführbare Ausführbarungen, die nicht von irgendetwas abhängig sind. Es ist kein Framework oder Docker erforderlich, nur die alte ausführbare Datei.
Dies ist eigentlich die bevorzugte Methode zur Verwendung des PGROURINER -Tools. Native Executables sind sehr optimiert und haben eine sehr kurze Startzeit und bieten um ein Vielfaches eine bessere Benutzererfahrung.
Hier sind die Schritte:
pgroutiner --info ein, um zu sehen, dass es funktioniert.Das ist es.
So installieren Sie ein globales Tool (empfohlen):
$ dotnet tool install --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' (version '5.4.0') was successfully installed.So aktualisieren Sie ein globales Tool:
$ dotnet tool update --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' was successfully updated from version '5.0.7' to version '5.0.8'. Dies ermöglicht ein globales Befehlszeilen -Tool pgroutiner . Versuchen Sie, pgroutiner --help zu tippen.
Um Ihrem Projekt nur ein lokales Tool hinzuzufügen, müssen Sie eine Manifestdatei erstellen und ein Tool ohne --global -Switch wie in diesem Tutorial beschrieben hinzufügen.
TL-DR:
Fügen Sie Ihr Projekt oder Ihre Lösung .config -Verzeichnis hinzu.
Fügen Sie diesem Verzeichnis die Datei dotnet-tools.json mit dem folgenden Inhalt hinzu:
{
"version" : 1 ,
"isRoot" : true ,
"tools" : {
"dotnet-pgroutiner" : {
"version" : " 5.0.6 " ,
"commands" : [
" pgroutiner "
]
}
}
} Aus Ihrem Befehlszeilen -Typ dotnet tool restore
Führen Sie das Tool mit dotnet tool run pgroutiner [arguments] , z dotnet tool run pgroutiner --help
pgroutiner (siehe die obigen Anweisungen)pgroutiner --help ein, um verfügbare Befehle und Switches anzuzeigen (die Liste ist lang).pgroutiner ein, um eine neue Verbindung zu definieren, wenn Sie keine haben - und um die Standardkonfigurationsdatei für diese DIR zu erstellen. Weitere Informationen zum Verbindungsmanagement finden Siepgroutiner --info ein, um festzustellen, ob Sie eine Verbindung zur Datenbank herstellen können, und um andere Umgebungsinformationen anzuzeigen.pgroutiner --list ein, um die Liste aller Objekte anzuzeigen.pgroutiner --ddl [object_name] ein, um die Datennannungssprache für das Objekt aus dem zweiten Parameter anzuzeigen.pgroutiner --search [search expression] ein, um Datendefinitionen mit Suchausdruck zu durchsuchen. Der pgroutiner ist so konzipiert, dass er aus dem .NET -Projektroot ausgeführt werden kann - und es wird alle verfügbaren Verbindungen von Standard appsettings.Development.json -JSON -Dateien ( appsettings.json .
Es wird die erste verfügbare Verbindungszeichenfolge aus dem Abschnitt ConnectionStrings verwendet:
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
} HINWEIS: Dies ist das NPGSQL -Verbindungs -String -Format, kann jedoch auch Standard -Postgresql -URL -Verbindungsformat postgresql://{user}:{password}@{server}:{port}/{database} verwenden.
Ausführen einfacher Info -Befehl, um die Verbindung zu testen, um die Umgebung anzuzeigen:
~$ 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 oder --connection : ~$ pgroutiner -c ConnectionString2 --info ~$ pgroutiner --connection ConnectionString2 --info Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password: Verbindungsserver, Port, Datenbank und Benutzer haben vordefinierte Standardwerte ( localhost , 5432 , postgres , postgres ) - Klicken Sie auf die Eingabeteilung und verwenden Sie die Standardeinstellung.
Die Befehlszeile kann die gesamte Verbindungszeichenfolge mit -c oder --connection -anstelle des Verbindungsnamens verwenden:
~$ pgroutiner --connection "Server=localhost;Db=test;Port=5432;User Id=postgres;Password=postgres;" --infopostgresql://{user}:{password}@{server}:{port}/{database} - anstelle von NPGSQL -Verbindungszeichenfolge: {
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
}
} ~$ pgroutiner --connection "postgresql://postgres:postgres@localhost:5432/test" --infoJeder Teil der Verbindung (Server, Port, Datenbank, Benutzer und Kennwort) kann aus der Verbindungszeichenfolge oder der Verbindungs -URL weggelassen werden und wird durch die folgenden Umgebungsvariablen ersetzt:
PGHOST oder PGSERVER um den fehlenden Serverparameter zu ersetzen.
PGPORT , um den fehlenden Portparameter zu ersetzen.
PGDATABASE oder PGDB zum Ersetzen des fehlenden Datenbankparameters.
PGHOST oder PGSERVER um den fehlenden Serverparameter zu ersetzen.
PGUSER , um den fehlenden Benutzerparameter zu ersetzen.
PGPASSWORD oder PGPASS um den Parameter des fehlenden Kennworts zu ersetzen.
Jede mögliche Befehlszeilenoption und -schalter kann in der Konfigurationsdatei konfiguriert werden.
Verwenden Sie den Abschnitt PgRoutiner -Konfiguration in der JSON -Konfiguration ( appsettings.json oder appsettings.Development.json ), Beispiel:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner UND UNTERSTELLEN KONFIGURATIONS -Einstellungen als Standardwert, wenn der Konfigurationsabschnitt PgRoutiner vorhanden ist.
Verwenden Sie die Befehlszeile, um alle Konfigurationseinstellungen zu überschreiben.
In der Regel hat jede Konfigurationseinstellung ihren Äquivalent in der Befehlszeile als von Kebab-Cased Sitch, beginnend mit zwei Strichen. Beispiele:
SkipConnectionPrompt , Befehlszeile: --skip-connection-promptSchemaSimilarTo , Befehlszeile: --schema-similar-to Viele Einstellungen haben auch Abkürzung Alias, beispielsweise kann die Connection entweder: -c -conn --conn -connection --connection sein.
Boolesche Einstellungen sind Schalter. Es reicht aus, einen Schalter ohne Wert einzuschließen pgroutiner --skip-connection-prompt um ihn einschalten:
Fügen Sie false oder 0 hinzu, um es auszuschalten: pgroutiner --skip-connection-prompt false
Sie können die aktuell angewandten Einstellungen mit dem Setting --settings inspizieren. pgroutiner --settings zwingen, einen Operation zu überspringen, und es wird nur alle aktuellen Einstellungen angezeigt. Es wird auch den Befehlszeilen-Alias in Kommentar-Headern angezeigt.
Sie können auch pgroutiner --info ausführen, das unter anderem derzeit angewandte Einstellungen angezeigt wird, die sich von Standardwerten unterscheiden.
Wenn kein Konfigurationsabschnitt vorhanden ist, ist PgRoutiner überall vorhanden. Wenn Sie pgroutiner ohne Parameter ausführen, werden Sie angeboten, um die Standardkonfigurationsdatei appsettings.PgRoutiner.json zu erstellen:
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 wird, falls vorhanden, immer nach der appsettings.json und appsettings.Development.json geladen und überschreibt alle möglichen Einstellungswerte in diesen Dateien.
Wenn Sie diese Konfigurationsdateien von einem anderen Ort laden müssen, können Sie --config-path, for example, -config-path ../../dir2/
pgroutiner --config ../../dir2/my-config.json können auch diese Optionen verwenden, um benutzerdefinierte Konfigurationsdateien zu laden: -cf , --cf , -config , --config , -config-file , --config-file , beispielsweise
Sie können aktuelle Einstellungen auch auf eine --write-config-file Konfiguration schreiben, indem pgroutiner --write-config-file ../../dir2/my-config.json eine dieser Optionen verwenden -wcf
Die vollständige Konfigurationsdatei mit allen Standardwerten für diese aktuelle Version
Beschreibung: -l -ls --ls --list to dump or search object list to console. Use the switch to dump all objects or parameter values to search.
Beispiele:
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 $ Beschreibung: -def -ddl --ddl -definition --definition to dump object schema definition in console supplied as a value parameter.
Beispiele:
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 $ Beschreibung: s --s --search to search object schema definitions and dump highlighted results to the console.
Sucht ganze Definitionen und Dumps, um ganze Definitionen zu konsolen, die den Ausdruck enthalten.
HINWEIS: Die Suchausdrucksübereinstimmung wird hervorgehoben.
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)
);
... Abhängig vom Befehl startet dieses Tool externe Prozesse mit PostgreSQL -Client -Tools wie psql , pg_dump oder pg_restore .
Das bedeutet, dass PostgreSQL -Client -Tools auf dem System installiert werden müssen. PostgreSQL -Client -Tools werden standardmäßig mit jeder PostgreSQL -Installation installiert.
Wenn Sie keinen Server wollen, sondern nur Client -Tools:
postgresql-client zu installieren, so etwas wie $ sudo apt-get install -y postgresql-client , hängt jedoch vom System ab. Wenn pgroutiner ein externes Tool aufruft, wird zunächst versucht, den Standard -Alias psql oder pg_dump aufzurufen. Wenn die Version des Tools dann nicht mit der Version der Verbindung übereinstimmt, wird versucht, die ausführbare Datei am Standardort zu finden:
C:Program FilesPostgreSQL{0}binpg_dump.exe und C:Program FilesPostgreSQL{0}binpsql.exe für Windows -Systeme./usr/lib/postgresql/{0}/bin/pg_dump und /usr/lib/postgresql/{0}/bin/psql für Linux -Systeme.{0} ist die Hauptversionsnummer.Diese Pfade sind standardmäßig Binärdateien installiert.
Wenn PGROURTERIER die Version des Version sieht, wird eine Warnung und einen Rückfall mit einer geeigneten Versionsnummer auf diesen Pfad veranlasst.
Dieses Verhalten kann durch Einstellungen PgDumpFallback bzw. PsqlFallback -Einstellungswerte vermieden werden.
Dies ist eine Open-Source-Software, die ohne jegliche Entschädigung frei entwickelt und gewartet wird.
Copyright (c) Vedran Bilopavlović - VB -Beratung und VB -Software 2020 Dieser Quellcode ist unter der MIT -Lizenz lizenziert.