PgRoutiner 、PostgreSQLデータベースとPostgreSQL .NETプロジェクトのコマンドラインツールのセットです。
.NET構成プロジェクト接続文字列(またはカスタム定義接続)を使用 - できます:
データベースを簡単にナビゲートして検索します。
C#およびTSモデルとコードを生成します。
データベーススクリプトを生成し、ツールを実行します。
マークダウンドキュメントを生成します。
CRUDコマンド関数を生成します。
プレゼンテーションスライドを参照してください
pgroutinerブログを参照してください
Pgroutiner Conceptブログを参照してください
pgroutinerデータベース管理ブログを参照してください
pgroutiner code-genブログを参照してください
pgroutinerドキュメントブログを参照してください
注:このREADMEのすべての例、および上記のプレゼンテーションでは、[PostgreSQLチュートリアル]のPostgreSQLサンプルデータベースを使用しています。
クイックスタート:
- リリースページから最新バージョンのネイティブ実行可能ファイル(フレームワークに依存しない)をダウンロードします。
- ダウンロードされた実行可能ファイルに適切なパスを設定します。
- タイプ
pgroutiner --info- 注:ネイティブの実行可能ファイルを使用すると、何倍も速く、非常に短い起動時間であり、ユーザーエクスペリエンスを何度も提供します。
目次:
これは、Pgroutinerツールを始めるための最速かつ最も簡単な方法です。リリースページには、何にも依存しないダウンロード可能な実行可能ファイルが含まれています。フレームワークやDockerは必要ありません。ただ、単純な古いネイティブ実行可能です。
これは、実際には、pgroutinerツールを使用する好ましい方法です。ネイティブの実行可能ファイルは非常に最適化されており、非常に短い起動時間があり、ユーザーエクスペリエンスを何度も提供しています。
ここにステップがあります:
pgroutiner --info fそれが機能することを確認します。それだけです。
グローバルツールをインストールする(推奨):
$ 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可能になります。 pgroutiner --help 。
プロジェクトにローカルツールを追加するには、マニフェストファイルを作成し、このチュートリアルで説明されているように--globalスイッチなしでツールを追加する必要があります。
TL-DR:
プロジェクトまたはソリューションに.configディレクトリを追加します。
次のコンテンツを使用して、 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] 2番目のパラメーターからオブジェクトのデータ定義言語を表示します。pgroutiner --search [search expression]検索式を使用してデータ定義を検索します。 pgroutiner 、 .NETプロジェクトルートから実行されるように設計されています。また、標準の構成JSONファイル( appsettings.Development.jsonやappsettings.jsonなど)から利用可能な接続を読み取ります。
ConnectionStringsセクションから最初の使用可能な接続文字列を使用します。
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
}注:これはNPGSQL接続文字列形式ですが、標準のpostgresql url接続形式postgresql://{user}:{password}@{server}:{port}/{database}を使用することもできます。
環境を確認するために接続をテストするための簡単な情報コマンドを実行します。
~$ 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 。
可能なすべてのコマンドラインオプションとスイッチは、構成ファイルで構成できます。
json構成( appsettings.jsonまたはappsettings.Development.json )のPgRoutiner構成セクションを使用してください。
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner 、構成セクションPgRoutinerが存在する場合、デフォルト値として構成設定を読み取り、適用します。
コマンドラインを使用して、構成設定をオーバーライドします。
一般的なルールとして、任意の構成設定は、2つのダッシュで始まるケバブ層のsitchと同等のコマンドラインに相当します。例:
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)
);
...コマンドに応じて、このツールはpsql 、 pg_dump 、 pg_restoreなどのPostGreSQLクライアントツールで外部プロセスを開始します。
つまり、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 for Windowsシステム。/usr/lib/postgresql/{0}/bin/pg_dumpおよび/usr/lib/postgresql/{0}/bin/psql for linuxシステム。{0}はメジャーバージョン番号です。これらのパスはPostgreSQLであり、デフォルトでバイナリをインストールします。
Pgroutinerがバージョンの不一致を確認すると、適切なバージョン番号でそのパスへの警告とフォールバックが促されます。
この動作は、それぞれ設定PgDumpFallbackとPsqlFallback設定値によって回避できます。
これは、補償なしに自由に開発および維持されているオープンソースソフトウェアです。
Copyright(c)VedranBilopavlović -VBコンサルティングおよびVBソフトウェア2020このソースコードは、MITライセンスの下でライセンスされています。