A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de PostgreSQL

Curso de PostgreSQL

Oswaldo Rodr铆guez Gonz谩lez

Oswaldo Rodr铆guez Gonz谩lez

Particiones

13/32
Recursos

Aportes 96

Preguntas 41

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Ese color rojo me causa un tremendo conflicto interno 鈥 馃槄

Otra de las ventajas de las tablas particionadas es que puedes utilizar la sentencia TRUNCATE, la cual elimina toda la informaci贸n de una tabla, pero a nivel partici贸n. Es decir, si tienes una tabla con 12 particiones (1 para cada mes del a帽o) y deseas eliminar toda la informaci贸n del mes de Enero; con la sentencia ALTER TABLE tabla TRUNCATE PARTITION enero; podr铆as eliminar dicha informaci贸n sin afectar el resto.

Creando particiones
![](

Hola, creo que hay un error en las fechas鈥 La partici贸n deber铆a ser en enero del mismo a帽o 2010鈥 No de 2010 a 2019. De resto todo bien!

Es importante recalcar que en la fecha final de nuestro rango de d铆as el motor de bases de datos excluye el valor de nuestro 煤ltimo d铆a es decir, si el mes termina en 31 entonces en nuestro rango debe terminar en 32

No conoc铆a la partici贸n de tablas. Ni que pod铆amos asignar un rango a nuestros querys

Particiones
- Separacion fisica de datos
- Estructura logica

-- Tabla bitacora_viaje
CREATE TABLE public.bitacora_viaje(
    id serial,
    id_viaje integer,
    fecha date
) PARTITION BY RANGE (fecha) WITH (OIDS = FALSE);
ALTER TABLE public.bitacora_viaje OWNER to postgres;

-- Vamos a crear la particion
CREATE TABLE bitacora_viaje201001 PARTITION OF public.bitacora_viaje
FOR VALUES FROM ('2010-01-01') TO  ('2020-04-24');

-- Insertamos un dato --> ERROR antes de crear la particions
INSERT INTO public.bitacora_viaje(id_viaje, fecha)
VALUES(1, '2010-01-01');

-- Mostramos los valores de la tabla bitacora_viaje
SELECT * FROM bitacora_viaje;

-- eliminamos la tabla bitacora_viaje y se eliminara la particion igualmente
DROP TABLE bitacora_viaje;```

HolaM

隆Comparto mi script de creaci贸n de tablas as铆 como una imagen de mi modelo resultante!

1.- Modelo resultante

2.- Script de creaci贸n de tablas

/* SE CREA TABLA DE ESTACION */
CREATE TABLE public.estacion(id_estacion    BIGSERIAL PRIMARY KEY,
                             nombre         CHARACTER VARYING,
                             direccion      CHARACTER VARYING);

/* SE CREA TABLA DE TREN */
CREATE TABLE public.tren(id_tren    BIGSERIAL PRIMARY KEY,
                         modelo     CHARACTER VARYING,
                         capacidad  INTEGER);

/* SE CREA TABLA DE PASAJERO */
CREATE TABLE public.pasajero(id_pasajero BIGSERIAL PRIMARY KEY,
                             nombre      CHARACTER VARYING,
                             direccion   CHARACTER VARYING,
                             fecha       DATE);


/* SE CREA TABLA DE TRAYECTO */
CREATE TABLE public.trayecto(id_trayecto    BIGSERIAL PRIMARY KEY,
                             id_estacion    BIGINT,
                             id_tren        BIGINT,
                             nombre         CHARACTER VARYING);

/* SE AGREGA LLAVE FORANEA ESTACION-TRAYECTO */
ALTER TABLE public.trayecto
    ADD CONSTRAINT estacion_trayecto_FK FOREIGN KEY (id_estacion) REFERENCES public.estacion(id_estacion);

/* SE AGREGA LLAVE FORANEA TREN-TRAYECTO */
ALTER TABLE public.trayecto
    ADD CONSTRAINT tren_trayecto_FK FOREIGN KEY (id_tren)   REFERENCES public.tren(id_tren);

/* SE CREA TABLA DE VIAJE */
CREATE TABLE public.viaje(id_viaje    BIGSERIAL PRIMARY KEY,
                          id_pasajero BIGINT,
                          id_trayecto BIGINT,
                          inicio      DATE,
                          fin         DATE);

/* SE AGREGA LLAVE FORANEA PASAJERO-VIAJE */
ALTER TABLE public.viaje
    ADD CONSTRAINT pasajero_viaje_FK FOREIGN KEY (id_pasajero) REFERENCES public.pasajero(id_pasajero);

/* SE AGREGA LLAVE FORANEA TRAYECTO-VIAJE */
ALTER TABLE public.viaje
    ADD CONSTRAINT trayecto_viaje_FK FOREIGN KEY (id_trayecto) REFERENCES public.trayecto(id_trayecto);


La tabla se divide internamente en peque帽as partes o tablas en rangos o listas definido, que pueden ser: fechas u objetos. Existen dos tipos de particiones Particionamiento de rango (Range Partitioning) y Particionamiento de lista (List Partitioning)

En que casos es recomendado usar el particionamiento de tablas?

No pude poner en practica esta clase, espero no sea tan fundamental, por ningun sitio me aparecio la opcion de particion al crear una tabla, sea una tabla nueva o vieja no aparece.

Las particiones se usan para optimizar las b煤squedas de la informaci贸n

Las particiones,
Cuando haya mucha informaci贸n en un table.
Dos factores importantes.
Separacion fisica de datos.
Estructura l贸gica

Codigo

CREATE DATABASE transporte
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    LC_COLLATE = 'C.UTF-8'
    LC_CTYPE = 'C.UTF-8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;
CREATE TABLE public.estacion
(
    id integer NOT NULL DEFAULT nextval('estacion_id_seq'::regclass),
    nombre character varying(100) COLLATE pg_catalog."default",
    direccion character varying(100) COLLATE pg_catalog."default",
    CONSTRAINT estacion_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.estacion
    OWNER to postgres;
CREATE TABLE public.pasajero
(
    id integer NOT NULL DEFAULT nextval('pasajero_id_seq'::regclass),
    nombre character varying(100) COLLATE pg_catalog."default",
    direccion_residencia character varying COLLATE pg_catalog."default",
    fecha_nacimeinto date,
    CONSTRAINT pasajero_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.pasajero
    OWNER to postgres;
CREATE TABLE public.trayecto
(
    id integer NOT NULL DEFAULT nextval('trayecto_id_seq'::regclass),
    id_tren integer NOT NULL,
    id_estacion integer NOT NULL,
    CONSTRAINT trayecto_pkey PRIMARY KEY (id),
    CONSTRAINT trayecto_id_estacion_fkey FOREIGN KEY (id_estacion)
        REFERENCES public.estacion (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID,
    CONSTRAINT trayecto_id_tren_fkey FOREIGN KEY (id_tren)
        REFERENCES public.tren (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.trayecto
    OWNER to postgres;

-- Table: public.tren

-- DROP TABLE public.tren;

CREATE TABLE public.tren
(
    id integer NOT NULL DEFAULT nextval('tren_id_seq'::regclass),
    modelo character varying(50) COLLATE pg_catalog."default",
    capacidad integer,
    CONSTRAINT tren_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.tren
    OWNER to postgres;

CREATE TABLE public.viaje
(
    id integer NOT NULL DEFAULT nextval('viaje_id_seq'::regclass),
    id_pasajero integer NOT NULL,
    id_trayecto integer NOT NULL,
    inicio date,
    fin date,
    CONSTRAINT viaje_pkey PRIMARY KEY (id),
    CONSTRAINT viaje_id_pasajero_fkey FOREIGN KEY (id_pasajero)
        REFERENCES public.pasajero (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID,
    CONSTRAINT viaje_id_trayecto_fkey FOREIGN KEY (id_trayecto)
        REFERENCES public.trayecto (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.viaje
    OWNER to postgres;

Llegu茅 un poco tarde, pero a los que no les salga la opci贸n de partici贸n deben hacer esto

Es bastante interesante el tema de las particiones. Aqu铆 dejo una lectura con informaci贸n b谩sica y clara. Tambi茅n est谩 la documentaci贸n oficial

uisssh. esto esta brutal

Informaci贸n resumida de esta clase
#EstudiantesDePlatzi

  • Las particiones consisten en la separaci贸n f铆sica de datos conservando la estructura l贸gica, esto ayuda a acelerar nuestras consultas

  • Si la tabla que vamos a crear es particionada debemos indicarlo en la pesta帽a general

  • No es posible crear llaves primarias en tablas particionadas

A mi me quedo de esta forma 馃槂

CREATE TABLE IF NOT EXISTS public.bitacora_viaje
(
    id serial NOT NULL,
    id_viaje integer NOT NULL,
    fecha date NOT NULL
) PARTITION BY RANGE (fecha);

-- Partitions SQL
CREATE TABLE public.bitacora_viaje201001 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-01-01') TO ('2010-02-01');
	
CREATE TABLE public.bitacora_viaje201002 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-02-01') TO ('2010-03-01');
	
CREATE TABLE public.bitacora_viaje201003 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-03-01') TO ('2010-04-01');
	
CREATE TABLE public.bitacora_viaje201004 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-04-01') TO ('2010-05-01');
	
CREATE TABLE public.bitacora_viaje201005 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-05-01') TO ('2010-06-01');
	
CREATE TABLE public.bitacora_viaje201006 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-06-01') TO ('2010-07-01');
	
CREATE TABLE public.bitacora_viaje201007 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-07-01') TO ('2010-08-01');
	
CREATE TABLE public.bitacora_viaje201008 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-08-01') TO ('2010-09-01');
	
CREATE TABLE public.bitacora_viaje201009 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-09-01') TO ('2010-10-01');
	
CREATE TABLE public.bitacora_viaje201010 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-10-01') TO ('2010-11-01');
	
CREATE TABLE public.bitacora_viaje201011 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-11-01') TO ('2010-12-01');
	
CREATE TABLE public.bitacora_viaje201012 PARTITION OF public.bitacora_viaje
    FOR VALUES FROM ('2010-12-01') TO ('2011-01-01');

En la clase el profe comete un error con las fechas del rango, al momento de poner 2010-01-01 to 2019-01-31, deber铆a ser en realidad 2010-01-01 to 2010-01-31, por eso al momento en el que dice que la inserci贸n del registro con la fecha 2012-01-01 va a fallar, no falla y muestra otro error que es el de la creaci贸n de la tabla particionada, en el que dice que la tabla ya existe. Espero que sirva de aclaraci贸n.

A m铆 no me funcion贸 la partici贸n hasta que no le puse comillas al nombre de la bit谩cora.

CREATE TABLE "Bitacora_viajes201001" PARTITION OF "Bitacora_viajes"
FOR VALUES FROM ('2010-01-01') TO ('2010-01-31');

Para crear al modelo entidad relaci贸n
seleccionan Tables, en el men煤 seleccionan Tool -> new ERD Project.
Si ya tienen las tablas creadas solo las arrastran sino hay un icono que les permite crear las tablas.

Hay errores muy grandes en este v铆deo. Desde la creaci贸n del script con un rango de 9 a帽os, hasta la ejecuci贸n del mismo, donde no se seleccionan los pedazos correctos y se ejecutan otros distintos a los explicados.

Particiones: hace una separaci贸n f铆sica de los datos, pero conserva la misma estructura l贸gica.
O sea: se guardan diferentes partes de la tabla en distintas partes del disco (u otros discos). Lo que hace la partici贸n es definir peque帽as nuevas tablas con un rango definido. Esto ayuda mucho a la performance de las querys

Las particiones tienen muchos m谩s componentes interesantes como subparticionamiento, Mantenimiento De Particiones,practicas recomendas que podemos consultar en la documentaci贸n

No he podido lograr configurar la particion en pgadmin4, por ende no cree tabla con particion. Alguien sabra si es por la version? es 9.5.8

No entend铆 algo donde se hacen las particiones y se crea el rango, en el video el profe coloc贸 FROM (鈥2010-01-01鈥) TO (鈥2019-01-31鈥)

Habia dicho que por a帽o, pens茅 que ser铆a algo como:
FROM (鈥2010-01-01鈥) TO (鈥2010-12-31鈥)

Pero cuando el hace la prueba de una segunda inserci贸n con a帽o 2012, esta arroja error, no se por que?

Como se podria realizar particiones de manera dinamica? Con el metodo visto en el video, seria necesario cada cierto tiempo crear varias particiones para todas las tablas y de esa manera que la data se continue guardando correctamente

Este es un tema muy importante que toma fuerza en entornos productivos transaccionales, ya que los volumenes de datos pueden llegar a ser muy extensos y, por la naturaleza de los mismos, no ser谩 posible llevarlos a un sitio de respaldo.
Yo soy DBA y el motor con el que mas trabajo es Oracle. Ah铆, la opci贸n de particionamiento es una utilidad enterprise (es decir, debes pagar una especie de licenciamiento adicional).
En Oracle, existen particionamientos por rangos (como se vio en la clase en fechas, pero de igual forma puede tratarse de rangos num茅ricos, por ejemplo), por valores (algo as铆 como un tipo de indice de valor espec铆fico) y existe una opci贸n muy interesante que particiona por referencia, es decir, por medio de registros que corresponden a llaves for谩neas.

Habra que revisar las opciones de postgres y, de antemano, saber que se cuenta con la ventaja de que son utilidades de c贸digo abierto, eso esta genial.

Saludos!

Guardar Script
Para poder guardar un script, en la barra superior en el icono guardan y asignan un nombre. Esto se guardar谩 en el servidor, luego no vamos a las pesta帽as

Tools>Storage Manager>Seleccionan el Archivo>Icono de Guardar

Necesito ayuda. En pgAdmin no aparece el tab de partition. Busque en el archivo postgresql.conf y no encontre nada. En la web de pgAdmin solo aparece que desde la versi贸mn 10 en adelante esta opci贸n ser谩 visible. Mi versi贸n es: PostgreSQL 11.6, compiled by Visual C++ build 1914, 64-bit.

No sabia esto de las particiones. Esto va a ayudar a que al hacer consultas en una base de datos, el tiempo de ejecuci贸n quiz谩 no le tome tanto tiempo a que toda la informaci贸n est茅 en una sola tabla

entonces igual se hace la busqueda entre rangos? y cuando encuentra el rango hace la busqueda entre elementos?

Muy interesante.

que interesante el tema de las particiones

Para los que vengan llegando, en las nuevas versiones se debe agregar comillas dobles al nombre de la tabla a la cual se esta particionando, si no tendran un Error que dice

error relation bitacora_viajes does not exist

AQUI la solucion:

CREATE TABLE BITACORA_VIAJES201001 PARTITION OF "BITACORA_VIAJES"
FOR VALUES FROM ('2010-01-01') TO ('2010-01-31');

me parece que el instructor va muy rapido, y cambia las cosas sin explicar, 0 puntos para este video

驴Qu茅 son las particiones?

驴Por qu茅 las tablas con particiones no tienen llaves primarias?

Rango de las particiones

驴Qu茅 haremos est谩 clase?

No es posible crear llaves primarias en tablas particionadas, ya que la info est谩 toda dividida.

Entendi el concepto de la tabla particionada, pero me gustaria ver un caso de uso en un ambiente 鈥渞eal鈥, espero mas adelante en el curso este ese tema

No se me habia ocurrido lo de las particiones, claro que puede mejorar el rendimiento de las busquedas

Excelente Oswaldo explicando!

Las particiones hacen una separaci贸n f铆sica de datos pero conservan la misma estructura l贸gica.
Separaci贸n f铆sica de datos significa que es posible guardar varias partes de la misma tabla en diferentes espacio de disco e incluso en otros discos.
La misma estructura l贸gica significa que la consulta SQL no cambia. Va a ser la misma sea o no una tabla particionada.
Internamente separa la tabla en peque帽as tablas que tienen un rango definido de alguna columna. Por ejemplo si decidimos particionar por el tiempo: podemos particionar la tabla por mes. Es decir cada partici贸n corresponder谩 a un mes.
Cuando se ejecuta el SELECT de la tabla particionada directamente va a buscar a la partici贸n que corresponde al rango de el mes consultado.
Ventajas:

  • Se evita recorrer una sola tabla con toda la informaci贸n, lo cual acelera enormemente las consultas
  • evita que la tabla se pueda bloquear porque est谩 siendo muy consultada y modificada al mismo tiempo.
    Procedimiento: creamos una tabla y la configuramos como particionada. Adem谩s indicamos cu谩l va a ser la columna donde armaremos los rangos para armar las particiones. Posteriormente generamos las distintas particiones definiendo para cada caso el rango y la referencia a la tabla particionada.
    Si hacemos una consulta SQL a una tabla particionada para una partici贸n que no existe nos tira error.
    Al momento de crear la tabla particionada no hacemos usos de llaves primarias. No es posible crear llaves primarias en tablas particionadas ya que la informaci贸n est谩 toda dividida. Las tablas que s铆 tienen las llaves primarias son las particiones (las tablas referidas.)

Muy bueno para reafirmar conceptos de SQL

Listo!

Comparto mis apuntes hasta esta clase PostgreSQL apuntes Espero sea de utilidad 馃槈

muy bueno de un video con una sola tabla 鈥 al siguiente con tener todas las tablas relacionadas 鈥 jajaja esto es muy art atack che 鈥

Este tipo de tablas se podr铆a usar para almacenar logs.

puedes quitarle el color rojo no deja visualizar bien

Para los que usan MYSQL, tambien se puede hacer aqui les dejo el link: https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html

No es posible crear llaves primarias en tablas particionadas esto debido a que la informaci贸n se encuentra dividida.

La segunda vez que corre el Script para otra fecha no selecciona la parte del INSERT y el error que se muestra es porque esta tratando de ingresar de nuevo todo, incluso la partici贸n. Recomiendo poner desde el inicio el rango de 鈥2010-01-01鈥 hasta el 鈥2010-02-01鈥. Este rango solo cubrir谩 el mes de enero ya que excluir谩 el primer d铆a de febrero.

Tengo una consulta. 驴Qu茅 semejanzas existen entre las tablas particionadas y las tablas temporales?

me daba error, al aprecer ejecuta todo el codigo como insert esta primero da error y no crea la tabla, lo unico que hice fue hacer los codigos por separado, osea primero hice la parte de CRCEATE ejecute luego puse la parte de INSERT

Comenzando

INSERT INTO public.trip_binnacle(id_trip, created_at) VALUES (1,鈥2010-01-15鈥);

SELECT * FROM trip_binnacle;

CREATE TABLE trip_binnacle_2010_01 PARTITION OF trip_binnacle
FOR VALUES FROM (鈥2010-01-01鈥) TO (鈥2010-01-31鈥);

Excelente ejemplo

Creaci贸n de una partici贸n con pgAdmin

Wow, qu茅 buena explicaci贸n. Hab铆a utilizado postgres por muchos a帽os sin entrar a los detalles, es genial lo que estoy aprendiendo en este curso. Gracias!

Hubo un peque帽o error. Al crear la partici贸n la crea de enero del 2010 a final de enero del 2019

Buenas tardes, queria consultarles porque no me aparece la solapa partition cuando intento crear la tabla. es una tabla nueva pero no me aparece

Se puede indexar las particiones鈥

create table bitacora_viaje_20100102 partition of bitacora_viaje
for
values
from (鈥2018-01-01鈥) to (鈥2018-01-30鈥);

create index bt_0102 on bitacora_viaje_20100102 (id_viaje);

las particiones en Postgres son como a MySQL las Vistas?

Crear la partici贸n con Queries: CREATE TABLE ... PARTITION OF ... FOR VALUES FROM ... TO ...

CREATE TABLE public.bitacora_viaje
(
    id serial,
    id_viaje integer,
    fecha date
) PARTITION BY RANGE (fecha) 
WITH (
    OIDS = FALSE
);

ALTER TABLE public.bitacora_viaje
    OWNER to postgres;

Cuando intento crear la particion del segundo mes me muestra lo siguiente

CREATE TABLE vitacora_viaje201002 PARTITION OF vitacora_viaje
FOR VALUES FROM ('2010-02-01') TO ('2010-02-29');```
error


ERROR: date/time field value out of range: "2010-02-29"
LINE 2: FOR VALUES FROM (鈥2010-02-01鈥) TO (鈥2010-02-29鈥);
^
SQL state: 22008
Character: 98```

El mes uno lo hago as铆.

CREATE TABLE vitacora_viaje201001 PARTITION OF vitacora_viaje
FOR VALUES FROM ('2010-01-01') TO ('2010-01-31');```
Sugerencias?
Saludos.


Ventajas en general: -Evita que la tabla se bloque por constantes consultas y modificaciones. -Proceso de b煤squeda e inserci贸n es m谩s eficiente.

Lo mas resaltante de este punto es conocer el concepto (saber que existe) y los casos de uso.

Considero que al momento de implementarlo, se debe estar muy pendiente de la documentacion

En ocasiones llega un punto en el que tienes mucha informaci贸n en una sola tabla y el Particionamiento es la mejor opci贸n. La partici贸n se refiere a dividir lo que es l贸gicamente una tabla grande en piezas f铆sicas m谩s peque帽as.

Creaci贸n de rango CREATE TABLE bitacora202001 PARTITION OF bitacora FOR VALUES FROM ('2020-01-01') TO ('2020-01-32');

La tabla particionada tiene un id pero no es primary key, ya que realmente estas hacen referencias a las tablas que si tienen las llaves primarias.

Las particiones consisten en: 1.Separaci贸n F铆sica esto es guardar varias partes de la misma tabla en diferentes espacios de disco e incluso en otros discos; 2.Conservar la Estructura L贸gica esto es que se puede hacer el el SELECT de la misma forma como se hac铆a anteriormente.

h

RANGE: es una funci贸n para realizar rangos din谩micos s铆 estamos haciendo programaci贸n funcional.

Normalmente valdr谩n la pena solo cuando una tabla ser铆a muy grande. El punto exacto en el que una tabla se beneficiar谩 de la partici贸n depende de la aplicaci贸n, aunque una regla general es que el tama帽o de la tabla debe exceder la memoria f铆sica del servidor de la base de dato

La informaci贸n de una tabla consultada corresponde a un espacio f铆sico de memoria en del servidor. Como se dijo anteriormente una los factores que se le puede atribuir realizar el aplicar el criterio de partici贸n a una tabla es que la data de la tabla exceda la memoria del SERVE

驴C贸mo funciona una consulta? S铆 se consulta sobre alg煤n mes en espec铆fico en una tabla particionada en rangos de fechas entonces se dirige autom谩ticamente a la partici贸n que tiene el mes que deseamos consultar

--
--Crear Tabla partici贸n
--
CREATE TABLE public.bitacora
(
    id integer NOT NULL DEFAULT nextval('bitacora_id_seq'::regclass),
    id_viaje integer,
    fecha date
) PARTITION BY RANGE (fecha) --Indica la columana para la partici贸n
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE public.bitacora
    OWNER to postgres;
COMMENT ON TABLE public.bitacora
    IS 'Esta es una tabla ser谩 una tabla particionada para guardar las fechas por particiones y realizar m谩s eficiente las b煤squedas';


	
CREATE TABLE bitacora202001 PARTITION OF bitacora
FOR VALUES  FROM ('2020-01-01') TO ('2020-01-31');

CREATE TABLE bitacora202002 PARTITION OF bitacora
FOR VALUES  FROM ('2020-02-01') TO ('2020-02-28');


INSERT INTO public.bitacora(
	id_viaje, fecha)
	VALUES 
		(23,'2020-01-30'),
		(25,'2020-01-28'),
		(1,'2020-02-23'),
		(2,'2020-02-27')
		;
SELECT * FROM bitacora;

Con los comandos SQL puedo crear varias tablas de una vez, o es necesario ir creando tabla por tabla usando pgAdmin4?

Muy 煤til para tablas muy grandes y para eficientar las consultas!

驴Se pueden utilizar llaves foraneas en una tabla particionada? Seria buena practica si se desea guardar relaci贸n.

驴Pero este tipo de particiones se har铆an de manera din谩mica o mes por mes lo har铆amos de manera manual?

Particiones

Esta clase de las particiones esta excelente, no sabia que existe esta cualidad que permite tener una buena performance de la Base de Datos

La partici贸n menciona el rango 2010 -01-01 hasta 2019-01-31 en el minuto 7.31 Sin embargo al intentar insertar con otro mes 2010-02-01 no es posible ? Como se especifica que el rango est谩 determinado 煤nicamente para el mes 01 y no para todas las fechas entre esos a帽os?

Particiones:

  • Separaci贸n f铆sica de datos (se puede hacer por rangos de fechas)
  • Estructura l贸gica (se usa la misma forma de hacer consultas)

Se pueden generar particiones sobre una table, peor con criterios distintos, por ejemplo
Hacer tres particiones por A帽os, por rango de fechas y por Id de pasajero.

se pueden creas particiones para almacenar todo lo que no entre en un rango, para evitar hacer las pariciones antes de insertar y despu茅s al agaragar el rango que postres reorganice la tabla

Es sumamente 煤til para preparar informaci贸n de auditoria fiscal solicitada por mes dentro de un rango de 5 a帽os.

Muy buen dato para tener en cuenta el uso y la configuraci贸n de una tabla particionada. Ahora que tenga los millones de datos la usar茅.

Creaci贸n de tabla Bitacora_viaje:

CREATE TABLE public."Bitacora_viajes"
(
    "bitacora_ID" serial,
    "viaje_ID" integer,
    fecha date
) PARTITION BY RANGE (fecha);

ALTER TABLE public."Bitacora_viajes"
    OWNER to postgres;

Que tema mas interesante, no tenia conocimiento que exist铆a y llevo ya 1 a帽o largo utilizando postgreSQL, me gustar铆a saber si as铆 como se hizo por comandos SQL, se puede realizar por la interfaz gr谩fica, donde estamos creando la tabla mas espec铆ficamente en la ventana 鈥淐REATE-TABLE鈥.

Genial esta clase, manejo una base de datos masiva en otro motor de base de datos y esto ayudo a optimizar el tiempo en consultas, super importante para acelerar el acceso a los datos.