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

Inserci贸n y consulta de datos

16/32
Recursos

Aportes 66

Preguntas 11

Ordenar por:

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

Hay una situaci贸n importante sobre las claves for谩neas (FK) que se explica en esta clase y me gustar铆a resaltarla un poco mas:
Primeramente recordar del curso de Fundamentos de BD que a las tablas se les llama 鈥渋ndependientes鈥 cuando no tienen FK鈥檚. Del mismo modo una tabla es 鈥渄ependiente鈥 cuando tiene al menos una FK, es decir, son tablas que dependen de tablas independientes.
Es importante** al momento de crear tablas e insertar datos en ellas**, empezar siempre por las tablas independientes y una vez terminadas seguir con las dependientes

Hay que tener mucho cuidado con las llaves foraneas cuando se deja la opcion de CASCADA cuando se borra o se actualiza. Ayuda a ahorrar tiempo, perr esto puede afectar la transacionalidad en bases grandes.

Postgresql, es una excelente opci贸n para tener una BD relacional.

--/////////////////
--16.Inserci贸n y consulta de datos
--////////////////



SELECT * FROM public.estacion;--si data
SELECT * FROM public.pasajero;--reto
SELECT * FROM public.trayecto;--si data
SELECT * FROM public.tren;--si data
SELECT * FROM public.viaje;--reto




--insert "estacion"
INSERT INTO public.estacion (nombre,direccion)
VALUES 
    ('Estaci贸n Centro','St 1# 12'),
    ('Estaci贸n Norte','St 100# 112')
;

--insert "tren"
INSERT INTO public.tren (capacidad,modelo)
VALUES 
    (100,'Modelo 1'),
    (100,'Modelo 2')
;

--insert "trayecto"
INSERT INTO public.trayecto (tren,estacion,nombre)
VALUES
    (1,1,'Ruta 1');
    (2,2,'Ruta 2');
;

-- RETO
INSERT INTO public.pasajero (nombre,fecha_nacimiento,direccion_residencia)
VALUES
    ('Jos茅 Ordo帽ez','1987-1-3','St 100# 12'),
    ('脕ngel Quintero','1987-1-12','St 101# 12'),
    ('Rafel Castillo','1977-1-12','St 102# 12'),
;
INSERT INTO public.viaje (id_pasajero,id_trayecto,inicio,fin)
 VALUES
    (1,1,'2019-01-02','2019-01-02'),
    (2,1,'2019-01-03','2019-01-03'),
    (2,2,'2019-01-04','2019-01-04'),
    (3,2,'2019-01-04','2019-01-04')

;
-- Delete sin limit
DELETE FROM public.estacion WHERE estacion.id  =4;
--delete limit
DELETE FROM public.estacion WHERE estacion.id IN
     (
		SELECT id FROM public.estacion 
	  		WHERE estacion.id IN(3,4)
			ORDER BY  estacion.id  
		 	LIMIT 2
	 )
;

-- update sin limit
UPDATE public.estacion
SET id=4, nombre='Estaci贸n SUR-OESTE', direccion='St 4# 1'
WHERE estacion.id = 4;

-- update utilizando limit
UPDATE public.estacion
	SET 
		id=4, 
		nombre='Estaci贸n SUR-OESTE', 
		direccion='St 4# 1'
	WHERE id IN (
		SELECT estacion.id FROM public.estacion
			WHERE estacion.id in(4)
			ORDER BY estacion.id
			LIMIT 1
	)
;

A帽adir algo el delete con limit es algo que vi en el curso de mysql sql y es buena pr谩ctica limitar la operaci贸n por si algo sale mal, pero en el caso de postgres me parece que es algo contra producente ya que para hacerlo con limit hay que hacerlo a trav茅s de una subquery

Tanto poder en algo tan sencillo 馃懆鈥嶐煉

Este pgAdmin es enserio muy sencillo-

Es muy, pero muy importante cuando se usan las sentencias DELETE y UPDATE, nunca pero nunca pero nunca jamas olvidar o quitar el WHERE.

Y para que nunca se nos olvide esta canci贸n:

https://www.youtube.com/watch?v=i_cVJgIz_Cs

驴C贸mo modificar el tipo de de una columna?


Si el tipo al que quieres cambiar es compatible como por ejemplo de integer => numeric puedes poner:

ALTER TABLE public.<table_name> 
ALTER COLUMN <column_name>
TYPE <new_type>;


Pero si quieres cambiar al un tipo que es incompatible como por ejemplo text => integer y te sale un error como este:

ERROR:  column "model" cannot be cast automatically to type integer
SUGERENCIA:  You might need to specify "USING model::integer".


Entonces pones lo sgte para forzar el cambio de tipo:

ALTER TABLE public.<table_name>
ALTER COLUMN <column_name>
TYPE <new_type>
USING <column_name>::<new_type>;

La verdad que PostgreSQL si facilita mucho la vida, es una muy buena opci贸n muy intuitiva.

Holaa! Les dejo un dato SUPER importante, a la hora de escribir, tengan mucho cuidado鈥 si usan mayusculas a la hora de insertar un valor, deben escribirlo asi:
鈥淚D_trayecto鈥 o sin mayusculas id_trayecto.
Lo acalro porque postgre les hara la vida imposible si no ponen comillas en las mayusculas, ya que piensa que es un dato de aplicacion, como un INSERT y no como un dato propio. Les dira por ejemplo que esa columna no existe.

Ac谩 les dejo una herramienta online para generar datos de forma masiva y poder hacer pruebas

https://www.onlinedatagenerator.com/

Me parece que con pg admin no se aprende real mente lo que hace postgres es mejor seguir el curso con la consola

-- Agregando datos a la tabla estacion
INSERT INTO public.estacion (nombre, direccion)
VALUES ('Estacion Centro', 'St 1#12');

-- comprobamos los datos de la tabla estacion
SELECT * FROM public.estacion;

-- Agregando datos a la tabla tren
INSERT INTO public.tren (capacidad, modelo)
VALUES (100, 'Modelo 1');

-- comprobamos los datos de la tabla tren
SELECT * FROM public.tren;

-- Para eliminar y despues agregar la columna de nombre a la tabla trayecto
ALTER TABLE public.trayecto DROP COLUMN nombre;
ALTER TABLE public.trayecto ADD nombre character varying(100);

-- Agregando datos a la tabla trayecto
INSERT INTO public.trayecto (id_estacion, id_tren, nombre)
VALUES (1, 1, 'Ruta 1');

-- Comprobamos los datos de la tabla trayecto
SELECT * FROM public.trayecto;

-- Eliminar una tubla de la tabla tren con el id = 1, como esta en cascada se elimino la tuplas que tenian ese id_tren
DELETE FROM public.tren WHERE id = 1;

-- Cambiar la tupla que tenda el id = de la tabla tren
UPDATE public.tren SET id = 1 WHERE id = 2;

Excelente curso!!

#鉁 Buena e Importante Pr谩ctica 馃挕
.
鉃★笍 Hay que ser muy espec铆ficos al utilizar UPDATE y DELETE por lo que una buena pr谩ctica es utilizar el ID de lo que se quiere borrar.
.
鉃★笍 Siempre que se utilicen uno de estos comandos es importante poner un LIMIT de acuerdo al n煤mero de datos a modificar.

Me siento totalmente perdido en este curso.

No se si el la tabla trayecto tiene mucho sentido si es que no dice a donde va sino de donde sale. Una vez creada la tabla 鈥楨staciones鈥 (si, en plural) se deberia anadir a la dependiente 鈥楾rayectos鈥 la columna id_destino (foreign key de id_estaciones).
Es una buena practica?

Se tiene dos tabla a y b. y tienen los atributos a.id y b.id y b.id_a que referencia al id de la tabla a. Debemos tomar en cuenta que no se pueden insertar id en el registros en la tabla b.id_a que no existan el tabla a.

Configurar una tabla con foreign key en cascada permite que al borrar o actualizar datos en la tabla de origen tambien se borre o actualice los datos en la tabla con el foreign key

Yo trabajo con Ubuntu 18.04 directamente en terminal. He creado un user (transport_manager) con los privileges de 鈥榰pdate鈥,鈥榠nsert鈥 y
鈥檚elect鈥 pero a煤n as铆 no pod铆a hacer insert ya que tengo los campos de primary key de una tabla con 鈥楽ERIAL鈥. Hay que a帽adir tambi茅n los privileges 鈥榰pdate鈥 y 鈥榮elect鈥 de la table 鈥榮equence鈥 asociada, de cada tabla que lo tenga, a este user (transport_manager) para poder hacer insert.

Si la tabla es 鈥榯rain鈥 y quiero dar privileges a la tabla sequence de train para el user transport_manager (las tablas sequence no permiten a帽adir privileges de insert):
trasnport=# set role postgres;
transpot=# grant update, select on train_id_sequence_id to transport_manager;

Fijar el valor de una tabla sequence (la de mi tabla 鈥榯rain鈥 es 鈥榯rain_id_sequence_id鈥) para que empiece por 0:
alter sequence train_id_sequence_id restart with 0;

Si tras hacer un insert en la tabla train ya existe un elemento con el id que le asigna la tabla sequence de forma autom谩tica, el insert no se producir谩.

Puedo importar tablas de excel a PostgreSQL?

Se debe tener en cuenta los delete que se haga en una de las tablas, ya que si borro alguno de los datos, se ver谩 afectada la forma en que venia trabajando.
Debido a la configuraci贸n de cascada, se actualizan los datos de las tablas que se encuentren con llaves for谩neas, si genero cambios en una de las tablas asociada a est谩s.

Excelente clase.

Excelente la recomendaci贸n de realizar eliminaciones l贸gicas, pero鈥
驴Est谩 bien no borrar ning煤n dato de la base de datos?

Se puede responder esta pregunta con una necesidad de todo sistema (pues los recursos ilimitados no existen, dado que siempre est谩 asociado a un costo): La gesti贸n del uso de disco.

La gesti贸n de uso disco requerir谩 que el sistema tenga alg煤n mecanismo de limpieza, eliminando la data antigua y dejando espacio para la nueva (esto requerir谩 un mantenimiento a la BD, como la desfragmentaci贸n y actualizaci贸n de estad铆sticas, recomiendo el curso de Optimizaci贸n de BD). Solo de esta manera aseguramos que el recurso de uso de disco no se agote.

驴Y qu茅 pasar铆a si la informaci贸n hist贸rica es indispensable?
Por ejemplo, en bancos se requieren datos de al menos 5 a帽os atr谩s para verificar o validar la trazabilidad de las transacciones financieras.
Normalmente se usan otros sistemas para guardar la data hist贸rica, quiz谩s un Datawarehouse (diferente a los sistemas de operaci贸n o gesti贸n de operaci贸n, donde la transaccionalidad es alta).

Informaci贸n resumida de esta clase
#EstudiantesDePlatzi

  • Scripts es la herramienta de PgAdmin para insertar, modificar y borrar datos

  • Con Insert Script puedo agregar datos a una tabla

  • Con Create Script puedo crear una tabla

  • Con Update Script puedo hacer cambios en la informaci贸n dentro de una tabla

la interfaz a vece es algo complicada, pero a la ves tambi茅n sencilla

Muy buenas las explicaciones. Por ahora vengo bien encarrilado 馃槣

Que buen ejemplo el que tiro el profe para las relaciones de tablas

Importante acotar que la modificaci贸n de un tipo de dato en una columna se puede realizar solamente cuando la tabla est谩 vac铆a, sino, podr铆a generar conflicto de compatibilidad con los datos ya cargados para esa columna.

Para asegurarme que estoy insertando un ID referido existente cuando usamos foreing key.
Puedo hacer cosas como:
INSERT INTO bar (description, foo_id) VALUES ( 鈥榯esting鈥, (SELECT id from foo WHERE type=鈥榖lue鈥) ).
Donde:
La columna 鈥渇oo_id鈥 de la tabla 鈥渂ar鈥 es la columna local (la que tiene la foreign key).
La tabla referida es 鈥渇oo鈥 y la columna referida es 鈥渋d鈥.
Fuente:
https://dba.stackexchange.com/questions/46410/how-do-i-insert-a-row-which-contains-a-foreign-key/46415

Hola!
El planteamiento que hice para mi proyecto tiene peculiaridades interesantes que les quiero compartir. Basado en la red de transporte colectivo de trenes que hay en Ciudad de M茅xico, di de alta algunos ejemplos de trayectos, que se denominan l铆neas, los cuales son rutas estaticas que siguen los trenes en su d铆a a d铆a. Estas l铆neas son bidireccionales, por lo que, el origen y el destino dependiendo de su orientaci贸n, hacen que una l铆nea en realidad sean dos.
Ahora, adem谩s de eso, existen estaciones que comunican l铆neas entre si, lo que se conoce como trasbordos. Y como esas estaciones ocurren de igual forma en l铆neas bidireccionales, pues su existencia en la definici贸n de las l铆neas es mayor a 2 en todos los casos.
Para darle orden a las l铆neas, ya que no use IDs num茅ricos, sino de tipo UUID, agregu茅 un campo de ordenamiento que da tambien el sentido de las estaciones.

Por ejemplo, las estaciones en una l铆nea, se ven como sigue:

Mientras que, para la misma l铆nea pero en sentido contrario, se ven asi:

N贸tese que existe una condici贸n en la consulta que ordena no por ID, sino por el valor asignado a la linea con respecto a su continuidad y su sentido.

Y por ejemplo, las estaciones de trasbordo lucen de la siguiente manera:

El proyecto esta siendo muy ilustrativo, sugiero encarecidamente que se realice bajo planteamientos propios y se piense en un problema a resolver. Creo que eso da mayor panorama y una practica mas consciente y profunda.

Saludos!

Este curso es un buen F5 de los dem谩s cursos de SQL.

Hola! aqui mi ejercicio de viajes agregando la funcion NOW() para 鈥渞ellenar鈥 los campos inicio y fin.

2 pasajeros

3 trenes

2 estaciones

Luego para cada pasajero insert茅 un viaje y utilic茅 la funcion NOW() para simular el inicio (fin = inicio)

Finalmente actualic茅 el campo fin de cada viaje con la funcion NOW()

Lo siguiente ser铆a calcular el tiempo que dura cada viaje.

En caso de que quieran o necesiten varios registros pasa sus tablas, les recomiendo esta pagina la cual genera hasta 10.000 registros de cualquier 谩mbito.
https://mockaroo.com/

Tabla Viaje

tabla pasajeros




La facilidad que nos da SQL para insertar datos y consultas

Hay alguna otra herramienta gr谩fica para hacer queries?

A mi el pgAdmin se me bloquea.

la magia del update y delete cascade

La verdad ahora que estoy aprendiendo SQL, no veo tan complicado esto, todo es muy intuitivo

A帽ad铆 dos viajeros y les hice su registro de viajes, no tuve ning煤n problema con actualizar sus datos ni de los datos del viajero ni de Id, de echo cambi茅 todos los datos del viajero y me funcion贸 de maravilla.

super bien explicado me, muy bueno le contenido los v铆deos son cortos pero se entiende lo que explica

Aqui algunas insersiones

INSERT INTO public.pasajero(
	nombre, direccion_residencia, fecha_nacimiento)
	VALUES ('Alejandro Mota', 'EDO Mex, Cusil V' , '1985-06-26');
	select * from public.pasajero;```

Listo!

Alguien mas siente que no tiene sentido que un trayecto tenga como atributo una sola estacion? Un trayecto no se deberia componer de una estacion inicial y otra final?

aqui

Para realizar un insert en nuestras tablas desde PgAdmin hacemos clic derecho en la tabla->Script->Insert Scritp

S铆 tenemos un ID serial, cuando tengamos insert podemos quitarlo del script insert porque el mismo motor de base de datos se encarga de asignar este n煤mero

Para modificar un tipo de dato en una columna se debe tomar en cuenta que el motor de B.D nos dejar谩 hacer el cambio por un tipo de dato equivalente. S铆 se desea cambiar el tipo de dato por my distinto seguramente se tendr谩 que hacer un drop column y luego un add column

S铆 s茅 una acci贸n como: borrar, actualizar en una registro que est谩 en la tabla a y la llave primaria de esa misma se referencia en otra tabla b, y tenemos la opci贸n ON CASCADE est谩 acci贸n actualizar谩 el registro que est谩 relacionado por medio del id

Increible clase

Podemos consultar datos con: View/Edit Data

Insertar datos a trav茅s de pgAdmin: Selecci贸n de la tabla + clic derecho / Scripts / INSERT Script

Para modificar un tipo de dato: En Properties borramos la columna y la creamos de nuevo.

Borrar y a帽adir una columna con Queries: ALTER TABLE ... DROP COLUMN / ALTER TABLE ... ADD COLUMN

Borrar un dato pgAdmin: Scripts / DELETE Script

Borran con Queries: DELETE FROM ... WHERE 'condici贸n'

Cambiar un dato: Scripts / UPDATE Script

Interesante clase!

Es muy f谩cil de manejar con la interfaz, excelente

Hasta ahora todo super!!

Es muy sencillo de utilizar PostgreSQL con la interfaz, aunque tambi茅n el manejo con consola es buena

Informacion lista!

![](

Muy bien explicado.