PgRoutiner เป็นชุดเครื่องมือบรรทัดคำสั่งสำหรับฐานข้อมูล PostgreSQL และโครงการ PostgreSQL .NET
การใช้สตริงการเชื่อมต่อโครงการกำหนดค่า. NET ของคุณ (หรือการเชื่อมต่อที่กำหนดเอง) - คุณสามารถ:
นำทางและค้นหาฐานข้อมูลได้อย่างง่ายดาย
สร้างรุ่น C# และ TS และรหัส
สร้างสคริปต์ฐานข้อมูลและเรียกใช้เครื่องมือ
สร้างเอกสารมาร์เดอร์
สร้างฟังก์ชั่นคำสั่ง CRUD
ดูสไลด์การนำเสนอ
ดูบล็อก pgroutiner
ดูบล็อกแนวคิด pgroutiner
ดูบล็อกการจัดการฐานข้อมูล Pgroutiner
ดูบล็อก Pgroutiner Code-Gen
ดูบล็อกเอกสาร Pgroutiner
หมายเหตุ: ตัวอย่างทั้งหมดใน readMe นี้รวมถึงในงานนำเสนอด้านบนใช้ฐานข้อมูลตัวอย่าง PostgreSQL จาก [การสอน PostgreSQL]
เริ่มต้นอย่างรวดเร็ว:
- ดาวน์โหลดไฟล์ปฏิบัติการดั้งเดิม (ไม่ได้ขึ้นอยู่กับเฟรมเวิร์กใด ๆ ) สำหรับเวอร์ชันล่าสุดจากหน้ารีลีส
- ตั้งค่าพา ธ ที่เหมาะสมไปยังไฟล์ปฏิบัติการที่ดาวน์โหลดได้
- พิมพ์
pgroutiner --info- หมายเหตุ: การทำงานกับ Executables ดั้งเดิมนั้นเร็วขึ้นหลายครั้งพวกเขาเวลาเริ่มต้นสั้น ๆ และพวกเขาให้ประสบการณ์การใช้งานที่ดีขึ้นหลายเท่า
สารบัญ:
นี่เป็นวิธีที่เร็วและง่ายที่สุดในการเริ่มต้นด้วยเครื่องมือ pgroutiner หน้ารีลีสมี executables ที่ดาวน์โหลดได้ซึ่งไม่ได้ขึ้นอยู่กับสิ่งใด ไม่จำเป็นต้องใช้เฟรมเวิร์กหรือนักเทียบท่า
นี่คือวิธีที่ดีกว่าในการใช้เครื่องมือ pgroutiner Executables ดั้งเดิมได้รับการปรับให้เหมาะสมมากและมีเวลาเริ่มต้นที่สั้นมากและให้ประสบการณ์การใช้งานที่ดีขึ้นหลายเท่า
นี่คือขั้นตอน:
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 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 ได้รับการออกแบบให้ทำงานจาก รูทโครงการ. 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}
เรียกใช้คำสั่ง Simple 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 ที่ใช้เคบับเริ่มต้นด้วยสองขีด ตัวอย่าง:
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} เป็นหมายเลขเวอร์ชันหลักเส้นทางเหล่านั้นคือ PostgreSQL ติดตั้งไบนารีตามค่าเริ่มต้น
เมื่อ Pgroutiner เห็นเวอร์ชันไม่ตรงกันมันจะแจ้งเตือนและทางเลือกทางเลือกไปยังเส้นทางนั้นด้วยหมายเลขเวอร์ชันที่เหมาะสม
พฤติกรรมนี้สามารถหลีกเลี่ยงได้โดยการตั้งค่า PgDumpFallback และค่าการตั้งค่า PsqlFallback ตามลำดับ
นี่คือซอฟต์แวร์โอเพนซอร์ซที่พัฒนาและบำรุงรักษาอย่างอิสระโดยไม่มีค่าตอบแทนใด ๆ
ลิขสิทธิ์ (c) Vedran Bilopavlović - VB Consulting และ VB Software 2020 ซอร์สโค้ดนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT