PgRoutiner es un conjunto de herramientas de línea de comandos para bases de datos PostgreSQL y proyectos PostgreSQL .NET.
Uso de su cadena de conexión del proyecto de configuración de .NET (o conexión definida a medida) - puede:
Navegue y busque la base de datos con facilidad.
Genere modelos y código C# y TS.
Genere scripts de base de datos y ejecute herramientas.
Genere la documentación de Markdown.
Genere funciones de comando crud.
Ver las diapositivas de presentación
Vea el blog de Pgroutiner
Vea el blog de concepto de Pgroutiner
Vea el blog de gestión de bases de datos de PgRoutiner
Vea el blog Pgroutiner Code-Gen
Vea el blog de documentación de Pgroutiner
Nota: Todos los ejemplos en este ReadMe, así como en la presentación anterior, utilizan la base de datos de muestra PostgreSQL de [PostgreSQL Tutorial]
Inicio rápido:
- Descargue archivos ejecutables nativos (que no dependen de ningún marco) para la última versión de la página de lanzamientos.
- Establezca la ruta apropiada en el archivo ejecutable descargado.
- Escriba
pgroutiner --info- Nota: Trabajar con ejecutables nativos es muchas veces más rápido, muy corto tiempo de inicio y ofrecen muchas veces una mejor experiencia de usuario.
Tabla de contenido:
Esta es la forma más rápida y fácil de comenzar con la herramienta PgRoutiner. La página de comunicados contiene ejecutables descargables que no dependen de nada. No se requiere marco o acopolador, simplemente un antiguo ejecutable nativo.
Esta es en realidad, la forma preferible de usar la herramienta PGROUTINER. Los ejecutables nativos están muy optimizados y tienen un tiempo de inicio muy corto y ofrecen muchas veces una mejor experiencia de usuario.
Aquí están los pasos:
pgroutiner --info para ver f funciona.Eso es todo.
Para instalar una herramienta global (recomendado):
$ dotnet tool install --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' (version '5.4.0') was successfully installed.Para actualizar una herramienta global:
$ dotnet tool update --global dotnet-pgroutiner
Tool 'dotnet-pgroutiner' was successfully updated from version '5.0.7' to version '5.0.8'. Esto habilitará una herramienta de línea de comandos global pgroutiner . Intente escribir pgroutiner --help .
Para agregar una herramienta local a su proyecto, solo necesita crear un archivo manifiesto y agregar una herramienta sin interruptor --global como se describe en este tutorial.
TL-DR:
Agregue el directorio .config a su proyecto o solución.
Agregue el archivo dotnet-tools.json a este directorio con el siguiente contenido:
{
"version" : 1 ,
"isRoot" : true ,
"tools" : {
"dotnet-pgroutiner" : {
"version" : " 5.0.6 " ,
"commands" : [
" pgroutiner "
]
}
}
} Desde su línea de comando Tipo dotnet tool restore
Ejecute la herramienta con dotnet tool run pgroutiner [arguments] , por ejemplo, dotnet tool run pgroutiner --help
pgroutiner (consulte las instrucciones anteriores)pgroutiner --help para ver los comandos y conmutadores disponibles (la lista es larga).pgroutiner para definir una nueva conexión si no tiene una y para crear el archivo de configuración predeterminado para este DIR. Ver más sobre la gestión de la conexiónpgroutiner --info para ver si puede conectarse a la base de datos y ver otra información del entorno.pgroutiner --list para ver la lista de todos los objetos.pgroutiner --ddl [object_name] para ver el lenguaje de definición de datos para el objeto desde el segundo parámetro.pgroutiner --search [search expression] para buscar definiciones de datos con la expresión de búsqueda. El pgroutiner está diseñado para ejecutar desde la raíz del proyecto .NET , y leerá cualquier conexión disponible de los archivos JSON de configuración estándar (como appsettings.Development.json y appsettings.json , en ese orden).
Utilizará la primera cadena de conexión disponible en la sección ConnectionStrings :
appsettings.json
{
"ConnectionStrings" : {
"DvdRental" : " Server=localhost;Db=dvdrental;Port=5432;User Id=postgres;Password=postgres; "
}
} Nota: Este es el formato de cadena de conexión NPGSQL, pero también puede usar el formato de conexión de URL de URL estándar postgresql://{user}:{password}@{server}:{port}/{database} .
Ejecutar el comando de información simple para probar la conexión para ver el entorno:
~$ 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 o -parámetro --connection : ~$ pgroutiner -c ConnectionString2 --info ~$ pgroutiner --connection ConnectionString2 --info Connection server [localhost]:
Connection port [5432]:
Connection database [postgres]:
Connection user [postgres]:
Connection password: El servidor de conexión, el puerto, la base de datos y el usuario tienen valores predeterminados predefinidos ( localhost , 5432 , postgres , postgres ): presione Enter para omitir y usar el valor predeterminado.
La línea de comando puede usar la cadena de conexión completa con -c o --connection -en lugar del nombre de conexión:
~$ pgroutiner --connection "Server=localhost;Db=test;Port=5432;User Id=postgres;Password=postgres;" --infopostgresql://{user}:{password}@{server}:{port}/{database} , en lugar de una cadena de conexión npgsql: {
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
}
} ~$ pgroutiner --connection "postgresql://postgres:postgres@localhost:5432/test" --infoCada parte de la conexión (servidor, puerto, base de datos, usuario y contraseña) se puede omitir en la cadena de conexión o URL de conexión y se reemplazará con las siguientes variables de entorno:
PGHOST o PGSERVER para reemplazar el parámetro del servidor faltante.
PGPORT para reemplazar el parámetro del puerto faltante.
PGDATABASE o PGDB para reemplazar el parámetro de base de datos faltante.
PGHOST o PGSERVER para reemplazar el parámetro del servidor faltante.
PGUSER para reemplazar el parámetro del usuario faltante.
PGPASSWORD o PGPASS para reemplazar el parámetro de contraseña faltante.
Cada opción y conmutación de línea de comandos posibles se puede configurar en el archivo de configuración.
Use la sección Configuración PgRoutiner en la configuración JSON ( appsettings.json o appsettings.Development.json ), Ejemplo:
{
"ConnectionStrings" : {
"TestConnection" : " postgresql://postgres:postgres@localhost:5432/test "
},
"PgRoutiner" : {
// pgroutiner settings
}
} pgroutiner leerá y aplicará la configuración de configuración como el valor predeterminado si existe la sección de configuración PgRoutiner .
Use la línea de comando para anular cualquier configuración de configuración.
Como regla general, cualquier configuración de configuración tiene su equivalente en la línea de comando como el sitch con case kebab que comienza con dos guiones. Ejemplos:
SkipConnectionPrompt , Línea de comando: --skip-connection-promptSchemaSimilarTo , Línea de comando: --schema-similar-to Muchas configuraciones también tienen alias de acceso directo, por ejemplo, la configuración Connection puede ser: -c -conn --conn -connection --connection .
Las configuraciones booleanas son interruptores, es suficiente incluir un interruptor sin valor para encenderlo: pgroutiner --skip-connection-prompt
Agregue false o 0 para apagarlo: pgroutiner --skip-connection-prompt false
Puede inspeccionar la configuración aplicada actualmente con el interruptor --settings . pgroutiner --settings forzarán a omitir cualquier operación y solo mostrará todas las configuraciones actuales. También mostrará alias de línea de comandos en encabezados de comentarios.
También puede ejecutar pgroutiner --info que, entre otras cosas, mostrará configuraciones aplicadas actualmente que difieren de los valores predeterminados.
Si no hay una sección de configuración PgRoutiner esté presente en cualquier lugar, y si ejecuta pgroutiner sin ningún parámetros, se le ofrecerá crear el archivo de configuración predeterminado 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 , si existe, siempre se cargará después de appsettings.json y appsettings.Development.json y anule cualquier valor de configuración posible en esos archivos.
Si necesita cargar estos archivos de configuración desde una ubicación diferente, puede usar --config-path, for example, Pgroutiner -config-path ../../dir2/
También puede usar cualquiera de estas opciones para cargar archivos de configuración personalizados: -cf , --cf , -config , --config , -config-file , --config-file , por ejemplo, pgroutiner --config ../../dir2/my-config.json
También puede escribir la configuración actual en una configuración personalizada utilizando cualquiera de estas opciones -wcf , --write-config-file , por ejemplo, pgroutiner --write-config-file ../../dir2/my-config.json
El archivo de configuración completo con todos los valores predeterminados para esta versión actual
Descripción: -l -ls --ls --list to dump or search object list to console. Use the switch to dump all objects or parameter values to search.
Ejemplos:
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 $ Descripción: -def -ddl --ddl -definition --definition to dump object schema definition in console supplied as a value parameter.
Ejemplos:
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 $ Descripción: s --s --search to search object schema definitions and dump highlighted results to the console.
Busca definiciones y volcados completos para consolar definiciones completas que contengan la expresión.
Nota: Se resalta la coincidencia de expresiones de búsqueda.
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)
);
... Dependiendo del comando, esta herramienta iniciará procesos externos con herramientas de cliente PostgreSQL como psql , pg_dump o pg_restore .
Eso significa que las herramientas del cliente PostgreSQL deben instalarse en el sistema. Las herramientas del cliente PostgreSQL se instalarán de forma predeterminada con cada instalación de PostgreSQL.
Si no desea un servidor, sino solo herramientas del cliente:
postgresql-client sería suficiente, algo así como $ sudo apt-get install -y postgresql-client , pero depende del sistema. Cuando pgroutiner llama a una herramienta externa, primero intentará llamar al alias psql o pg_dump predeterminado. Luego, si la versión de la herramienta no coincide con la versión desde la conexión, intentará localizar el ejecutable en la ubicación predeterminada:
C:Program FilesPostgreSQL{0}binpg_dump.exe y C:Program FilesPostgreSQL{0}binpsql.exe para sistemas Windows./usr/lib/postgresql/{0}/bin/pg_dump y /usr/lib/postgresql/{0}/bin/psql para sistemas Linux.{0} es el número de versión principal.Esas rutas son PostgreSQL instala binarios de forma predeterminada.
Cuando Pgroutiner ve la versión de la versión, provocará una advertencia y retroceso a esa ruta con un número de versión apropiado.
Este comportamiento se puede evitar mediante la configuración PgDumpFallback y los valores de configuración PsqlFallback respectivamente.
Este es un software de código abierto desarrollado y mantenido libremente sin ninguna compensación.
Copyright (c) Vedran Bilopavlović - VB Consulting y VB Software 2020 Este código fuente tiene licencia bajo la licencia MIT.