PgRoutiner هي مجموعة من أدوات سطر الأوامر لقواعد بيانات postgresql ومشاريع postgresql .NET.
باستخدام سلسلة اتصال مشروع Configuration الخاصة بك (أو اتصال محدد مخصصًا) - يمكنك:
التنقل والبحث في قاعدة البيانات بسهولة.
توليد نماذج C# و TS والرمز.
إنشاء البرامج النصية لقاعدة البيانات وتشغيل الأدوات.
توليد وثائق تخفيض.
توليد وظائف أمر CRUD.
انظر شرائح العرض التقديمي
انظر مدونة Pgroutiner
انظر مدونة مفهوم Pgroutiner
انظر مدونة إدارة قاعدة بيانات Pgroutiner
انظر مدونة كود Pgroutiner
انظر مدونة وثائق Pgroutiner
ملاحظة: جميع الأمثلة في هذا ReadMe ، وكذلك في العرض التقديمي أعلاه ، استخدم قاعدة بيانات عينة PostgreSQL من [PostgreSQL Tutorial]
بداية سريعة:
- قم بتنزيل الملفات القابلة للتنفيذ الأصلي (لا تعتمد على أي إطار عمل) للحصول على أحدث إصدار من صفحة الإصدارات.
- اضبط المسار المناسب على الملف القابل للتنفيذ.
- اكتب
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] لرؤية لغة تعريف البيانات للكائن من المعلمة الثانية.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 ، ولكن ، يمكنه أيضًا استخدام تنسيق اتصال URL PostGresQL القياسي 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 لاستبدال معلمة كلمة المرور المفقودة.
يمكن تكوين كل خيار سطر الأوامر والمفتاح في ملف التكوين.
استخدم قسم تكوين PgRoutiner في تكوين JSON ( appsettings.json أو appsettings.Development.json ) ، مثال:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} سيقوم pgroutiner بقراءة وتطبيق إعدادات التكوين كقيمة افتراضية في حالة وجود قسم التكوين PgRoutiner .
استخدم سطر الأوامر لتجاوز أي إعدادات تكوين.
كقاعدة عامة ، فإن أي إعداد تكوين له ما يعادله في سطر الأوامر باعتباره Sitch المغطى بالكباب بدءًا من شرطين. أمثلة:
SkipConnectionPrompt ، سطر الأوامر: --skip-connection-promptSchemaSimilarTo ، سطر الأوامر: --schema-similar-to تحتوي العديد من الإعدادات أيضًا على اختصار الاسم المستعار ، على سبيل المثال ، يمكن أن يكون إعداد Connection إما: -c -conn --conn -connection --connection .
إعدادات Boolean هي مفاتيح مفاتيح ، يكفي تضمين مفتاح دون قيمة لتشغيله: pgroutiner --skip-connection-prompt
أضف false أو 0 لإيقاف تشغيله: pgroutiner --skip-connection-prompt false
يمكنك فحص الإعدادات المطبقة حاليًا باستخدام --settings Switch. 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} هو رقم الإصدار الرئيسي.هذه المسارات هي PostgreSQL تثبيت الثنائيات بشكل افتراضي.
عندما يرى Pgroutiner عدم تطابق الإصدار ، فإنه سيؤدي إلى تحذير وتراجع إلى هذا المسار برقم إصدار مناسب.
يمكن تجنب هذا السلوك عن طريق الإعدادات PgDumpFallback و PsqlFallback إعدادات على التوالي.
هذا هو برنامج مفتوح المصدر تم تطويره وصيانته بحرية دون أي تعويض على الإطلاق.
حقوق الطبع والنشر (C) Vedran Bilopavlović - VB Consulting و VB Software 2020 تم ترخيص رمز المصدر هذا بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.