PgRoutiner adalah satu set alat baris perintah untuk basis data PostgreSQL dan Proyek PostgreSQL .NET.
Menggunakan string koneksi proyek konfigurasi .NET Anda (atau koneksi yang ditentukan khusus) - Anda dapat:
Navigasi dan cari database dengan mudah.
Menghasilkan model dan kode C# dan TS.
Hasilkan skrip basis data dan jalankan alat.
Menghasilkan dokumentasi penurunan harga.
Menghasilkan fungsi perintah crud.
Lihat slide presentasi
Lihat Blog Pgroutiner
Lihat Blog Konsep Pgroutiner
Lihat Blog Manajemen Database Pgroutiner
Lihat Blog Kode Pgroutiner
Lihat Blog Dokumentasi Pgroutiner
Catatan: Semua contoh dalam readme ini, serta dalam presentasi di atas menggunakan database sampel PostgreSQL dari [tutorial PostgreSQL]
Mulai Cepat:
- Unduh file yang dapat dieksekusi asli (tidak bergantung pada kerangka kerja apa pun) untuk versi terbaru dari halaman rilis.
- Atur jalur yang sesuai ke file yang dapat dieksekusi yang diunduh.
- Ketik
pgroutiner --info- Catatan: Bekerja dengan Executable asli berkali -kali lebih cepat, mereka waktu startup yang sangat singkat dan mereka menawarkan pengalaman pengguna yang lebih baik.
Daftar isi:
Ini adalah cara tercepat dan termudah untuk memulai dengan alat pgroutiner. Halaman rilis berisi executable yang dapat diunduh yang tidak bergantung pada apa pun. Tidak ada kerangka kerja atau Docker yang diperlukan, hanya eksekusi asli yang bisa dieksekusi.
Ini sebenarnya, cara yang lebih disukai untuk menggunakan alat pgroutiner. Eksekusi asli sangat dioptimalkan dan memiliki waktu startup yang sangat singkat dan mereka menawarkan pengalaman pengguna yang lebih baik.
Inilah langkah -langkahnya:
pgroutiner --info untuk melihatnya berfungsi.Hanya itu saja.
Untuk menginstal alat global (disarankan):
$ dotnet tool install --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' (version '5.4.0') was successfully installed.Untuk memperbarui alat global:
$ dotnet tool update --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' was successfully updated from version '5.0.7' to version '5.0.8'. Ini akan mengaktifkan pgroutiner Alat Global Command Line. Coba mengetik pgroutiner --help .
Untuk menambahkan alat lokal ke proyek Anda hanya, Anda perlu membuat file manifes dan menambahkan alat tanpa sakelar --global seperti yang dijelaskan dalam tutorial ini.
TL-DR:
Tambahkan direktori .config ke proyek atau solusi Anda.
Tambahkan file dotnet-tools.json ke direktori ini dengan konten berikut:
{
"version" : 1 ,
"isRoot" : true ,
"tools" : {
"dotnet-pgroutiner" : {
"version" : " 5.0.6 " ,
"commands" : [
" pgroutiner "
]
}
}
} Dari Baris Perintah Anda Jenis dotnet tool restore
Jalankan alat dengan dotnet tool run pgroutiner [arguments] , misalnya, dotnet tool run pgroutiner --help
pgroutiner (lihat instruksi di atas)pgroutiner --help untuk melihat perintah dan sakelar yang tersedia (daftarnya panjang).pgroutiner untuk menentukan koneksi baru jika Anda tidak memilikinya - dan untuk membuat file konfigurasi default untuk dir ini. Lihat lebih lanjut tentang manajemen koneksipgroutiner --info untuk melihat apakah Anda dapat terhubung ke database dan untuk melihat info lingkungan lainnya.pgroutiner --list untuk melihat daftar semua objek.pgroutiner --ddl [object_name] Untuk melihat bahasa definisi data untuk objek dari parameter kedua.pgroutiner --search [search expression] Untuk mencari definisi data dengan ekspresi pencarian. pgroutiner dirancang untuk dijalankan dari root proyek .net - dan akan membaca koneksi yang tersedia dari file JSON konfigurasi standar (seperti appsettings.Development.json dan appsettings.json , dalam urutan itu).
Ini akan menggunakan string koneksi pertama yang tersedia dari bagian ConnectionStrings :
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
} Catatan: Ini adalah format string koneksi NPGSQL, tetapi, ini juga dapat menggunakan format koneksi URL postgreSQL standar postgresql://{user}:{password}@{server}:{port}/{database} .
Menjalankan perintah info sederhana untuk menguji koneksi untuk melihat lingkungan:
~$ 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 atau -parameter --connection : ~$ pgroutiner -c ConnectionString2 --info ~$ pgroutiner --connection ConnectionString2 --info Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password: Server Koneksi, Port, Basis Data, dan Pengguna memiliki nilai default yang telah ditentukan sebelumnya ( localhost , 5432 , postgres , postgres ) - tekan Enter untuk melewatkan dan menggunakan default.
Baris perintah dapat menggunakan seluruh string koneksi dengan -c atau --connection -alih -alih nama koneksi:
~$ pgroutiner --connection "Server=localhost;Db=test;Port=5432;User Id=postgres;Password=postgres;" --infopostgresql://{user}:{password}@{server}:{port}/{database} - alih -alih string koneksi npgsql: {
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
}
} ~$ pgroutiner --connection "postgresql://postgres:postgres@localhost:5432/test" --infoSetiap bagian dari koneksi (server, port, basis data, pengguna, dan kata sandi) dapat dihilangkan dari string koneksi atau URL koneksi dan akan diganti dengan variabel lingkungan berikut:
PGHOST atau PGSERVER untuk menggantikan parameter server yang hilang.
PGPORT untuk mengganti parameter port yang hilang.
PGDATABASE atau PGDB untuk menggantikan parameter database yang hilang.
PGHOST atau PGSERVER untuk menggantikan parameter server yang hilang.
PGUSER untuk menggantikan parameter pengguna yang hilang.
PGPASSWORD atau PGPASS untuk mengganti parameter kata sandi yang hilang.
Setiap opsi dan sakelar baris perintah yang mungkin dapat dikonfigurasi dalam file konfigurasi.
Gunakan bagian Konfigurasi PgRoutiner di konfigurasi JSON ( appsettings.json atau appsettings.Development.json ), Contoh:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner akan membaca dan menerapkan pengaturan konfigurasi sebagai nilai default jika bagian konfigurasi PgRoutiner ada.
Gunakan baris perintah untuk mengganti pengaturan konfigurasi apa pun.
Sebagai aturan umum, pengaturan konfigurasi apa pun memiliki setara di baris perintah sebagai sitch berb-cased dimulai dengan dua tanda hubung. Contoh:
SkipConnectionPrompt , Command Line: --skip-connection-promptSchemaSimilarTo , baris perintah: --schema-similar-to Banyak pengaturan juga memiliki alias pintas, misalnya, pengaturan Connection dapat berupa: -c -conn --conn -connection --connection .
Pengaturan boolean adalah sakelar, cukup untuk memasukkan sakelar tanpa nilai untuk menyalakannya: pgroutiner --skip-connection-prompt
Tambahkan false atau 0 untuk mematikannya: pgroutiner --skip-connection-prompt false
Anda dapat memeriksa pengaturan yang diterapkan saat ini dengan --settings . pgroutiner --settings akan memaksa untuk melewatkan operasi apa pun dan hanya akan menampilkan semua pengaturan saat ini. Ini juga akan menampilkan alias baris perintah di header komentar.
Anda juga dapat menjalankan pgroutiner --info yang akan, antara lain, menampilkan pengaturan yang saat ini diterapkan yang berbeda dari nilai default.
Jika tidak ada bagian konfigurasi, PgRoutiner hadir di mana saja, dan jika Anda menjalankan pgroutiner tanpa parameter apa pun, Anda akan ditawarkan untuk membuat file konfigurasi default 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 , jika ada, akan selalu dimuat setelah appsettings.json dan appsettings.Development.json dan mengganti nilai pengaturan yang mungkin dalam file -file tersebut.
Jika Anda perlu memuat file konfigurasi ini dari lokasi yang berbeda, Anda dapat menggunakan --config-path, for example, pgroutiner -config-path ../../dir2/
Anda juga dapat menggunakan salah satu dari opsi ini untuk memuat file konfigurasi khusus: -cf , --cf , -config , --config , -config-file , --config-file , misalnya, pgroutiner --config ../../dir2/my-config.json
Anda juga dapat menulis pengaturan saat ini ke konfigurasi khusus dengan menggunakan salah satu opsi ini -wcf , --write-config-file , misalnya, pgroutiner --write-config-file ../../dir2/my-config.json
File konfigurasi penuh dengan semua nilai default untuk versi saat ini
Deskripsi: -l -ls --ls --list to dump or search object list to console. Use the switch to dump all objects or parameter values to search.
Contoh:
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 $ Deskripsi: -def -ddl --ddl -definition --definition to dump object schema definition in console supplied as a value parameter.
Contoh:
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 $ Deskripsi: s --s --search to search object schema definitions and dump highlighted results to the console.
Mencari seluruh definisi dan pembuangan untuk menghibur seluruh definisi yang berisi ekspresi.
Catatan: Pencarian pencocokan ekspresi disorot.
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)
);
... Bergantung pada perintah, alat ini akan memulai proses eksternal dengan alat klien PostgreSQL seperti psql , pg_dump , atau pg_restore .
Itu berarti, bahwa alat klien PostgreSQL harus diinstal pada sistem. Alat klien PostgreSQL akan diinstal secara default dengan setiap instalasi PostgreSQL.
Jika Anda tidak menginginkan server, tetapi hanya alat klien:
postgresql-client sudah cukup, sesuatu seperti $ sudo apt-get install -y postgresql-client , tetapi tergantung pada sistem. Ketika pgroutiner memanggil alat eksternal, pertama -tama akan mencoba memanggil alias default psql atau pg_dump . Kemudian, jika versi alat tidak cocok dengan versi dari koneksi, ia akan mencoba menemukan yang dapat dieksekusi di lokasi default:
C:Program FilesPostgreSQL{0}binpg_dump.exe dan C:Program FilesPostgreSQL{0}binpsql.exe untuk sistem windows./usr/lib/postgresql/{0}/bin/pg_dump dan /usr/lib/postgresql/{0}/bin/psql untuk sistem linux.{0} adalah nomor versi utama.Jalur tersebut adalah PostgreSQL menginstal binari secara default.
Ketika Pgroutiner melihat ketidakcocokan versi itu akan mendorong peringatan dan mundur ke jalur itu dengan nomor versi yang sesuai.
Perilaku ini dapat dihindari dengan pengaturan PgDumpFallback dan nilai pengaturan PsqlFallback masing -masing.
Ini adalah perangkat lunak open-source yang dikembangkan dan dipelihara secara bebas tanpa kompensasi apa pun.
Hak Cipta (C) Vedran Bilopavlović - VB Consulting dan VB Software 2020 Kode sumber ini dilisensikan di bawah lisensi MIT.